代码之家  ›  专栏  ›  技术社区  ›  Arsen Mkrtchyan

Sql中的关系

  •  3
  • Arsen Mkrtchyan  · 技术社区  · 17 年前

    我知道如何在SQL Server中创建一对多、多对多的关系,但是否可以创建一对一的关系?是否可以创建1对0或1关系?

    5 回复  |  直到 17 年前
        1
  •  3
  •   Quassnoi    17 年前

    PRIMARY KEY 将两个实体的 UNIQUE 两个实体的关键点:

    myrel(entityA, entityB, UNIQUE(entityA), UNIQUE(entityB))
    

    因此,如果 entityA = 1 entityB = 2 :

    entityA  entityB
          1        2
    

    ,你两者都不能联系 实体a=1 entityB ,也不是 实体b=2 对任何其他人 entityA .

    如果你的关系是 对称的 (即。 实体 实体B 属于同一领域并且相关的 实体B 实体B 实体 ),然后定义一个附加的 CHECK

    entityA  entityB
    
    UNIQUE(entityA)
    UNIQUE(entityB)
    CHECK(entityA < entityB)
    

    并使用此查询将规范化关系转换为规范化关系:

    SELECT entityA, entityB
    FROM   myrel
    UNION
    SELECT entityB, entityA
    FROM   myrel
    

    这是一个 (0-1):(0-1) 关系

    如果你想成为一个 1:1 关系,将此表定义为两者的域 实体B :

    myrel(entityA, entityB, UNIQUE(entityA), UNIQUE(entityB))
    A(id, PRIMARY KEY(id), FOREIGN KEY(id) REFERENCES myrel (entityA))
    B(id, PRIMARY KEY(id), FOREIGN KEY(id) REFERENCES myrel (entityB))
    

    通过移除 FOREIGN KEY 从任一表的定义中,可以将关系的对应部分从 1 (0-1) .

        2
  •  1
  •   Frans Bouma    17 年前

    两种方式:

    2) FK/UC-PK 1:1关系。表A有主键,表B有A的外键,但B中的FK不在B的主键上。现在在B中的FK字段上创建UC。

        3
  •  0
  •   Charles Bretana    17 年前

        4
  •  0
  •   Dewfy    17 年前

    这很有趣,但这是我在面试中最喜欢的问题。

    表A,B对应,每个表都有主键A,B,ID,将外键添加到任意表中。设为B:A_-REF,所以您只需要在A_-REF上添加唯一约束。

        5
  •  0
  •   Ray    17 年前

    id PK

    表B id PK FK表