在我的应用程序中,用户可以是以下三种类型之一:青少年,个人或组织成员。在我的users表中,我有一个布尔字段 teen (非null)和一个外键 organization_id (null)。
如果teen为true且organization_id为null,则该用户为青少年。青少年不能属于某个组织 如果teen为false且organization_id为null,则用户为个人 如果teen为false且organization_id不为null,则用户是组织的成员。
必须有更好的方法来做到这一点。我不喜欢存在青少年是真的而且organization_id不为空的情况。
添加新表,organizations_users并从users表中删除organization_id外键会更好吗?我看到的缺点是,我需要更长时间来确定用户是个人还是组织,并在适当的时候获取数据。
有更优雅的方式处理这个吗?
答案 0 :(得分:2)
如果您的角色列包含青少年,个人或成员,则会简化您的代码。您可能会将这些角色规范化为自己的表,并使用外键:
Roles
1 Teen
2 Individual
3 Member of an Organization
答案 1 :(得分:1)
在我看来,你已经用这种设计逼真了。一般来说,最好让你的抽象(模型)与现实世界保持同步,而不是一些非常特殊的情况。例如,青少年是年龄在13到19岁之间的人(取决于定义)。青少年可以是游泳俱乐部的成员,这是一个组织。任何年龄的人可能是也可能不是组织的成员。我建议如下:
答案 2 :(得分:0)
使用2个表格。表1是包含用户信息的User表。它还包含下一个表的ID的外键。
表2是UserType。 id是一个身份。这包含'十一','个人'和'组织'。
要进行查找,只需进行连接即可。