3

我有一个数据库设计问题。为了说明我的问题,想象一下:

一个简单的父->子关系:

[Parent] 1-----* [Children]

现在,当有孩子时,每个父母(妈妈或爸爸)都有一个长子。我需要从父母到长子的数据库中的强关系

[Parent] 1-----1 [Children]

我可以简单地将 FirstbornChildId 添加到父表中,但我不喜欢这种方法,因为它可能导致数据不一致。(FirstbornChildId 链接到 Child,而 ParentId 链接到不同的父级......)

实体框架应该映射关系,以便每个父实体都有一个链接到特定子实体的 FirstbornEntity 属性。

在 Microsoft SQL 2008 R2 中有什么好的方法可以实现这一点吗?

4

2 回答 2

2

两种可能的解决方案

三张表:

  • 父表
  • 儿童桌
  • FirstBorns 表
    • 父母的身份证
    • 儿童身份证

或者

Children 表中的WasFirstBorn 列(Y/N 或 1/0)

于 2012-06-20T12:32:37.237 回答
2

我认为你的方法很好。您必须防止应用层中的数据损坏。数据库约束只能做这么多。您至少可以拥有 FirstbornChildId 的外键,以确保孩子确实存在(无论父母如何)。

这个“firstborn”属性无论如何都是非规范化的:它可以从孩子的“birthdate”属性中派生出来。我很感激您出于性能原因要明确存储它,并且没有问题。但是如果你想让数据库完全处理完整性,这确实会让事情变得棘手。

于 2012-06-20T12:44:12.143 回答