这并不是一种多对多的关系。
例如:
我有一个用户表和一个角色表。
约束是一个用户可以有0-5个角色,并且一个角色可以分配给许多用户。
如何在数据库中建模?
谢谢
编辑:我正在数据库端为这个模型寻找一些标准的解决方案。上面也有类似的场景。例如:用户密码历史记录:
一个用户将在pwd_history表中存储最多10个以前的密码。有点
一对(0-10)关系。
但在我看来,在数据库方面没有标准的解决方案。(@branko的解决方案(2)看起来不错。)
我想这个模型的最佳实践是在客户端实施,使这些数字在属性文件中可配置,并实现客户端逻辑来处理这个问题。
最佳答案
有三种策略:
只需在数据库中将其建模为普通的多对多,但在触发器或(不太理想的)客户机代码中实施限制。
将其建模为多对多,但放置其他约束以限制行数:CHECK (ROLE_NO IN (1, 2, 3, 4, 5))
在U1
上的唯一约束{USER_ID, ROLE_NO}
和上述检查的组合确保属于同一用户的用户角色行不能超过五行。
只需拥有五个可空的一对多关系:
在所有这些策略中,我的第一直觉是:如果你的限制发生变化,它可能是最“干净”的,并且易于修改。
(3)在一些场景中可能更具性能(尽管在其他场景中也可能更慢),但是很难处理,而且绝对不灵活。
正确实现(1)将是一件痛苦的事情——您必须非常小心地进行锁定,以避免并发问题,并且可能会破坏流程中的可伸缩性。