当前位置: 首页 > 图文教程 > 数据库 > MSSQL > 浅谈数据库设计技巧(下)

MSSQL
SQL Server中常使用的DBCC命令
Windows2003服务器安装设置教程:MSSQL安全篇
MySql教程:两个表之间更新数据
asp.net网站开发中使用Sqlite嵌入式数据库
Microsoft SQL Server SA权限安全
SQL Server帐号孤立的问题解决
SQL server教程:SQL语法
修复MSSQLSERVER数据库置疑的步骤
安全基础知识 细说暴库的原理与方法
MSSQL和Mysql自定义函数与存储过程
MSSQL数据库不能手动创建新的连接
ASP连接MSSQL的错误: 拒绝访问
MSSQL数据库镜像在Oracle中是如何实现的
写给菜鸟站长:解读你的茫然
教你创建动态MSSQL数据库表
MSSQL下用UNION和系统表配合猜表名和字段名深度注入
Public权限下的列目录
phpBB 3.0.6 RC1简单介绍和下载
SQL Server:SQL中如何正确认识触发器
SQL Server:如何正确理解存储过程

MSSQL 中的 浅谈数据库设计技巧(下)


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-10-30   浏览: 113 ::
收藏到网摘: n/a

 

  三、多用户及其权限管理的设计
  开发数据库管理类的软件,不可能不考虑多用户和用户权限设置的问题。尽管目前市面上的大、中型的后台数据库系统软件都提供了多用户,以及细至某个数据库内某张表的权限设置的功能,我个人建议:一套成熟的数据库管理软件,还是应该自行设计用户管理这块功能,原因有二:
  1.那些大、中型后台数据库系统软件所提供的多用户及其权限设置都是针对数据库的共有属性,并不一定能完全满足某些特例的需求;
  2.不要过多的依赖后台数据库系统软件的某些特殊功能,多种大、中型后台数据库系统软件之间并不完全兼容。否则一旦日后需要转换数据库平台或后台数据库系统软件版本升级,之前的架构设计很可能无法重用。

  下面看看如何自行设计一套比较灵活的多用户管理模块,即该数据库管理软件的系统管理员可以自行添加新用户,修改已有用户的权限,删除已有用户。首先,分析用户需求,列出该数据库管理软件所有需要实现的功能;然后,根据一定的联系对这些功能进行分类,即把某类用户需使用的功能归为一类;最后开始建表:
  
功能表(Function_table)
名称     类型    约束条件   说明
f_id          int        无重复     功能标识,主键
f_name        char(20)    不允许为空   功能名称,不允许重复
f_desc        char(50)    允许为空     功能描述

用户组表(User_group)
名称     类型    约束条件   说明
group_id      int         无重复        用户组标识,主键
group_name    char(20)    不允许为空    用户组名称
group_power   char(100)   不允许为空    用户组权限表,内容为功能表f_id的集合

用户表(User_table)
名称     类型    约束条件   说明
user_id       int         无重复        用户标识,主键
user_name     char(20)    无重复        用户名
user_pwd      char(20)    不允许为空    用户密码
user_type     int         不允许为空    所属用户组标识,和User_group.group_id关联

  采用这种用户组的架构设计,当需要添加新用户时,只需指定新用户所属的用户组;当以后系统需要添加新功能或对旧有功能权限进行修改时,只用操作功能表和用户组表的记录,原有用户的功能即可相应随之变化。当然,这种架构设计把数据库管理软件的功能判定移到了前台,使得前台开发相对复杂一些。但是,当用户数较大(10人以上),或日后软件升级的概率较大时,这个代价是值得的。


  四、简洁的批量m:n设计
  碰到m:n的关系,一般都是建立3个表,m一个,n一个,m:n一个。但是,m:n有时会遇到批量处理的情况,例如到图书馆借书,一般都是允许用户同时借阅n本书,如果要求按批查询借阅记录,即列出某个用户某次借阅的所有书籍,该如何设计呢?让我们建好必须的3个表先:

书籍表(Book_table)
名称     类型    约束条件   说明
book_id       int         无重复        书籍标识,主键
book_no       char(20)    无重复        书籍编号
book_name     char(100)   不允许为空    书籍名称
……

借阅用户表(Renter_table)
名称     类型    约束条件   说明
renter_id     int         无重复        用户标识,主键
renter_name   char(20)    不允许为空    用户姓名
……

借阅记录表(Rent_log)
名称     类型    约束条件   说明
rent_id       int         无重复  &nbs