(MS-SQL)2个表,一对一,但可以为空?

时间:2010-08-18 16:32:11

标签: sql sql-server

好的,这就是我需要建模......

我有两个可以分开存在的物体 - 让我们说男人和女人,既不需要了解另一个。但是一旦他们“结婚”,就可以相互结婚。

换句话说,我正在尝试创建2个表,1个表对另一个表有一个FK,即NULLABLE。当我尝试通过dmbl将关系设置为1对1时,它不会让我 - 这是有道理的。

终极我想要

  1. 创造一个女人(不懂男人) 女人=新女人{Name =“Jane”,Id = 1};
  2. 创造一个男人(不懂女人) Man = new Man {Name =“John”,Id = 1,WomenId = null};
  3. 但是,当我把男人与女人联系起来......我希望能够做这样的事情

    Man.WomanId = 1;
    SubmitChanges();
    Man.Woman.Name = "Jane"
    

    这甚至可能吗?如果我做一对多 - 我怎么能这样做?在业务层?创建一个部分类并覆盖东西?

    希望这是有道理的:P

2 个答案:

答案 0 :(得分:1)

您必须制作多对多链接表。

根据您的型号,这可以是一个简单的表格:

(man, woman)

在两个字段上都有唯一约束,或者是一个更复杂的表

(id, man, woman, effective)

manwoman上添加了部分唯一索引,附加条款为WHERE effective = 1(这仅适用于SQL Server 2008

Effective = 1意味着婚姻现在有效。任何人都可以拥有任意深度的关系历史,但可以同时与另外一个异性结婚者结婚。

后一张表可以跟踪离婚甚至再婚。

答案 1 :(得分:0)

你可以搞乱你的数据库结构吗?如果您可以像这样构建它,这似乎更容易做到:

Person
------
PersonId
Name
Gender

RelationShip
------------
MalePersonId - Unique
FemalePersonId - Unique