我目前正在设计一个数据库模型,并且遇到了一个问题,在哪里我想了解更多有关什么是正确的做事方式的输入。数据库设计 - 关联实体
在下面的例子中,我有两个表,人员和角色。 现在1人可能被分配0个或更多角色。 这与多对多的关系相当直接,但棘手的部分来自于当你想允许用户选择他当前“操作”的角色时。
假定用户有一个选择5个角色可供选择,并且根据他目前选择了哪个角色,应用将呈现与他不同的意见/菜单/按钮/等
我看到了两个解决方案在这里:
1:(见下面链接的图像的顶部)
在个人表,你有一个可以为空FK的许多一对多的关系(关联实体)。
维基百科上Associative entity
它似乎确定为“其他实体”来引用这种关系。我只是不完全确定这是否包括角色和人员实体。
我对这个设计的喜欢是,很容易得到一个人所有允许角色的列表,然后你只需指向其中一个允许的角色,说“你是当前/活动的角色” 。这也是一种很好的方式,以确保用户只能拥有最新的角色,如果他有权访问该角色......只有我也看到了潜在的灾难: 如果在persons表中的FK引用另一个用户的关系。数据库设计将允许这样做。这只会是防止它的代码。
2:(见下面链接的图像的底部)
我把关联实体简单,而是我有FK在指向的角色表中的特定角色的人表。
这里的问题是我从DB设计中获得的帮助更少,确保一个人的“当前角色”是一个实际上“允许”的角色。
任何对此的思考,将不胜感激=)
更新:我有同样的问题的另一种变体。
两个实体:工作订单和站点
- 1网站可以访问许多工作单
- 1工单可以被很多网站访问
因此,我们有一个多TO-许多关系
问题:我们如何最好地在数据库中存储哪个站点是工单的所有者,哪些站点只能拥有一个拥有工单的站点。
我们是否将“OwnerSiteId”作为WorkOrder表中的列,或者是否可以引用多对多关系,而是说“那一个”是所有者。
类似于:http://stackoverflow.com/questions/12652152/mysql-circular-dependency-in-foreign-key-constraints –