我正在尝试规范化数据库以保存用户名和密码,以及特定用户可以访问的网页。这是我为了简单起见而开始的,但我认为'useraccess'表违反了我的2本书中的第一个规范化规则......
userpassword table(userid,username,userpassword)
useraccess table(userid, accesstopage0,accesstopage1,accesstopage2,accesstopage3)
显然,useraccess表存在失控的危险。我的问题是......解决这个问题的最佳方法是什么?到目前为止,这是我提出的替换useraccess表的原因,但我想就是否有更优雅的方法来做一些建议:
useraccess(userid,useridsequence,pageid)
pages(pageid,pagename)
所以一个例子就是......
userpassword table(userid,username,userpassword)
0, useralpha, jinx
1, userbravo, binx
2, usercharlie, jabber
然后使用userid和useridsequence作为复合键来维护完整性......
useraccess table(userid, useridsequence, pageid)
0, 0, 0
0, 1, 1
0, 2, 2
1, 0, 3
2, 0, 1
2, 1, 2
pages table(pageid,pagename)
0, page0.php
1, page1.php
2, page2.php
3, page3.php
所有这些似乎都比它需要的更复杂是否有更好的方法来做到这一点?
答案 0 :(得分:0)
您需要一个userpermissions表,表示用户和页面之间的多对多连接。
此表还可以包含定义该页面权限级别的属性。
如果您的用户在很大程度上拥有相同的权限,那么您可以介绍角色的想法 - 来宾,成员,管理员等,并将用户映射到角色,然后将角色映射到权限。
另外请注意,您应该对您的密码进行腌制和散列,以防止任何破坏您的应用程序的人获得有价值的凭据。