假设User
有很多Car
个。这些车只属于他。
您可以代表以下两种方式:
具有汽车集合和main_car属性的User
实体,指向集合中的一个。业务规则是:用户只能拥有属于他的主车。
OR
User
实体,带有汽车收藏品。其中一辆车可能具有布尔is_main
属性。业务规则是:只有1个属于用户的汽车可以被定义为主要。
业务规则将在setter中强制执行。
我想提出您的建议以及两种方法的优缺点。谢谢!
答案 0 :(得分:2)
我更喜欢第一种选择。
优点:
缺点:
我希望我能正确理解你的要求以及我的答案可以帮助你
答案 1 :(得分:2)
第二种选择的一个大问题是你有两个人,p1和p2,他们驾驶同一辆车。汽车可能是p1的主车而不是p2,所以你不能简单地为汽车设置一个is_main字段。这有希望更多地解释了阶级责任方面。
出于这个原因,我选择第一个选项。
答案 2 :(得分:1)
选项一将是最常采用的方法。
在汽车实体上创建is_main字段的问题是,如果您为一个用户选择了is_main,那么拥有该汽车的任何其他用户也会将该汽车设置为is_main。此外,几辆汽车有可能成为主要的汽车。对于任何给定用户的汽车,因为所有汽车的is_main属性都可以设置为true,因此很难对此进行限制。
如果您的用户有一个main_car字段,他们可以并且在任何给定时间只能拥有一辆主车。
您的第二种方法也存在数据完整性问题(您可能无意中使数据库无法正常化)。您可以删除汽车类型,因此删除用户的主车而不会发出任何类型的警告或异常(导致丢失有用信息)。如果你试图删除一辆用作主用车的方法,你会收到一个错误,因为用户突然有一辆不存在的主车。