我对两张表之间的基数有疑问。我不知道如何处理它。
想象一下:
有组:第 1 组、第 2 组、第 3 组等
一个组可以有多个项目,这些项目只能在其中一个组中。一家商店只能有一组商品,并且一次可以在一个商店中拥有一组商品,因此您可以说一家商店拥有一组。像这样,group 和 store 的基数是 1:1。但是,随着时间的推移,商店之间的组会发生变化,因此每个 stroe 都会改变它拥有的组,但组不会在商店之间重复。所以,商店会不时地交换组。
问题是我不确定它是否仍然是 1:1 或者它可以被视为 1:N,如果您认为它是长期的事情,如果我想注册更改日期,更是如此.
而且,这整个事情导致了一种三元关系,因为商店可以销售同时在一个组中的多个项目,并且只能在一组项目中,但是这个组一次只有一个商店拥有,但是,这家商店会随着时间的推移交换组。所以这让我的头爆炸。
我认为您的模型中可能缺少一个实体。随着时间的推移,一个商店可以与多个组相关联,一个组可以与多个商店相关联,因此除非您只想记录当前状态而没有历史记录,否则您将拥有 N:M 关系并需要一个联结表。就像是:
不幸的是,您可能需要在应用程序层中强制执行“一个商店一次一组”规则,或者使用触发器,我不确定 SQL 约束是否足够。
作为直接建模随时间变化的替代方案,如果您使用的数据库支持时态表(有时称为“系统版本化”),您可以使用该功能。
然后你可以拥有:
并且一组有一个商店是通过只能在一个组的数据中拥有一个商店来强制执行的,并且每个商店一个组可以通过对 的唯一约束来强制执行
Group.StoreId
。但是我可能会推荐另一种方法,除非您可以保证一组一商店规则适用于未来的版本(这似乎异常地限制了我的想法),因为前一种方法更容易重构以提供更大的灵活性.