(基于Web的应用场景)
考虑到以下条件,我试图解决问题:
应该有一个包含所有信息的用户表和user_contact表。工作人员和患者将继承详细信息以消除患者表的姓氏和名字以及员工表的冗余。
有一个家庭表,其family_id将患者表引用给家庭成员。
现在。我对下一个条件感到困惑
每个家庭开具账户,而非每位患者。单个家庭的患者使用相同的用户名和密码。如果我在家庭中输入用户名和密码属性,我还必须为员工输入用户名和密码。 我被告知我应该总是避免表中的冗余。我真的很难为最后一个条件构建一个表。
我怎样才能实现这一目标?我应该创建一个名为Account的表并具有属性(id,username,password)并将其作为外键引用,并由family表和staff表引用?
OR
我应该创建一个名为Account的表,其中包含属性(id,username,password,staff_id,family_id,type)。在这个设计中,我真的不确定它是否是一个好的,因为staff_id或family_id之间的一个属性将为null,它将始终返回一个约束,因为引用的父表没有值。
或者有更好的方法可以做到这一点,而不是我的任何选择?
任何帮助都将不胜感激。
答案 0 :(得分:1)
我被告知我应该总是避免表中的冗余。
你受过良好的教育。
创建密码表。
Password
--------
User ID
Password
Account or Staff value
Account or Staff ID
密码必须加密和加密。该值告诉您该ID是针对具有家庭特权的帐户还是具有员工权限的员工。
如果事实证明您需要两个以上的值,则应创建一个Value类。
Value
-----
Value ID
Value Name
也许是一个价值许可类。
Value Permission
----------------
Value ID
Permission ID
Permission
----------
Permission ID
Permission
这可能对您的应用程序来说太精细了。
记住。只要每个表包含与密钥,整个密钥以及密钥相关的值,您就可以创建数千个表,因此请帮助Codd。
答案 1 :(得分:1)
每当您不确定处理不明确或潜在流动性要求的最佳数据库结构时,最好的经验法则是将每个感兴趣的事物(无论是有形的还是无形的)视为实体/表格。
在您的情况下,您有帐户。有些帐户会分配给员工。有些帐户被分配给家庭。也许将来家庭帐户可能被分配给其他类型的个人或团体?无论如何,帐户将始终具有某些稳定属性,例如用户ID和密码。因此,制作一个帐户表。
然后,您需要弄清楚如何将您的其他实体与帐户相关联。我想你会很快发现你希望你的家庭餐桌和你的员工桌指向帐户,而不是相反。这才是最有意义的。至少在你的老板告诉你每个员工或家庭允许多个账户的新要求之前......