就像博客园的个人设置一样,对每个用户信息字段都有,任何人,朋友,自己三个权限,那么这样的数据库该怎么设计呢?
我个人想到的方案有两种:
1.每个属性是一个单独的表
user(id, nikename); --用户信息主表
permission(id, level); --权限表
name(id,user_id,permission_id); --用户名名称属性表
address(id,user_id,permission_id); --用户地址属性表
.....这样一次类推,每个属性是一张单独的表.
这样设计的好处是逻辑控制比较好做,但坏处是没加载一次用户信息都要把所有的属性表查询一次,这样至少也要查询10多张表,肯定不行.
2.以属性名为标识,控制权限
user(id, nikename,name,address,.......); --用户信息主表
permission(id, infoname,permission); --权限表
数据示例:
1, name, public
2, address, private
这样的设计方便的表的查询,但不好的地方在于不符合数据库设计规范,如果主表中的name,address名称改变,将会导致权限表对应不到
本人已经想不到还有什么好的的办法可以解决这个问题了,请各位大虾指点一二.
AttributeId, AttributeName, Status
AttributeId, AttributeValue
类似
参照sap权限
user(id, nikename,name,address,public,private,persion....); --用户信息主表
其中public,private,persion字段记录每个分别记录公开,私有,选择相关人的权限,例如nikename这个字段是公开的,那么在public中会记录这个字段的名字,或者做一个标识.