浅谈数据库设计技巧(下).txt[1]

[入库:2005年8月18日] [更新:2007年3月24日]

本文简介:选择自 comiunknown 的 blog

  三、多用户及其权限管理的设计
  开发数据库管理类的软件,不可能不考虑多用户和用户权限设置的问题。尽管目前市面上的大、中型的后台数据库系统软件都提供了多用户,以及细至某个数据库内某张表的权限设置的功能,我个人建议:一套成熟的数据库管理软件,还是应该自行设计用户管理这块功能,原因有二:
  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                   无重复                借阅记录标识,主键
r_id              int                   不允许为空        用户标识,和renter_table.renter_id关联
b_id             int                   不允许为空        书籍标识,和book_table.book_id关联
rent_date     datetime           不允许为空        借阅时间

本文关键:浅谈数据库设计技巧(下).txt
  相关方案
Google
 

本站最佳浏览方式为 分辨率 1024x768 IE 6.0(或更高版本的 IE浏览器)

go top