我遇到了数据库设计问题。为了说明我的问题想象如下:
一个简单的父 - >子关系:
[Parent] 1-----* [Children]
现在每个父母(妈妈或爸爸)在有孩子时都有一个长子。我需要从父母到初生儿童的数据库中建立强有力的关系
[Parent] 1-----1 [Children]
我可以简单地将一个FirstbornChildId添加到父表中,但我不喜欢这种方法,因为它可能导致数据不一致。 (FirstbornChildId链接到ParentId链接到另一个父级的Child ...)
实体框架应该映射关系,以便每个Parent-Entity都有一个链接到特定Child的FirstbornEntity属性。
在Microsoft SQL 2008 R2中有没有很好的方法来实现这一目标?
答案 0 :(得分:2)
三张桌子:
或
儿童表中的列WasFirstBorn (是/否或1/0)
答案 1 :(得分:2)
我认为你的方法很好。您必须防止应用程序层中的数据损坏。您可以使用数据库约束来做很多事情。您至少可以使用FirstbornChildId的外键来确保孩子确实存在(无论父母是否存在)。
这种“长子”属性无论如何都是非规范化的:它可以源自孩子们的“生日”属性。我很欣赏您出于性能原因而明确存储它,并且没有问题。但是如果你想让数据库完全处理完整性,那确实会让事情变得棘手。