数据库中的外键或布尔值

时间:2016-02-19 20:49:47

标签: sql foreign-keys relationship

我们说我有一个包含两个表User,Store的数据库。 让我们制定规则:

  1. 用户必须属于一个商店
  2. 商店可能有一个或多个用户
  3. 虽然商店可能有商店经理。对此最好的方法是什么? 添加' is_store_manager' Users表中的boolean列,或者在Store表中创建一个名为manager_user_fk的外键?我想这会创建一个多对多的关系,这会很糟糕,但选择我认为的用户将是一个坚实的约束。什么是最好的方法?

2 个答案:

答案 0 :(得分:1)

不要在Store上创建fk。这有点多余,会使未来的SQL查询变得更难。

您可以使用UserTypeManager类型添加另一个表格Non-Manager。然后,您将在Users表上添加指向UserType的fk。

修改

如果您希望允许用户拥有多个角色,则需要另一个join table

让我们调用上一个表格Role,而不是UserType,然后添加另一个表UserRole,即UserRole之间的联接(它只有2列:User的外键和Role的外键。使用此设置,User表上没有任何fk,因为此连接table会保存关于关系的所有信息。用户可以拥有你想要的任意数量的角色。

答案 1 :(得分:1)

可接受的解决方案的替代方案,它只允许用户属于一种类型,您可以使用我一直在做的替换布尔状态字段。创建一个名为UserManager的表,主键也是User的外键。

UserManager中有条目的任何用户都是经理。要获取经理,您只需使用UserManager加入用户表。这也允许您存储更多元数据(即,您可以在用户成为经理时存储等)。

然后,如果你想要一个AdminUser表,你也会做同样的事情。 AdminUser表中的任何用户也是管理员。您可以让用户同时(或者没有,或者一个)。随着存储更多关于类型的元数据。