如何创建两个具有外键约束的SQL表?

时间:2011-03-25 17:07:50

标签: sql sql-server-2008

我有两张表,比如表A和表B.

我希望在A和B之间存在1- *关系,因此对于每个A,有一个特定的B,可能还有多个其他B。

所以我有这样的表:

Table A
AKey INT IDENTITY PRIMARY KEY,
PrerequisiteKey INT FOREIGN KEY REFERENCES B(BKey)

Table B
BKey INT IDENTITY PRIMARY KEY,
RelationalAKey INT FOREIGN KEY REFERENCES A(AKey)

我希望每个A总是有1个B。我应该尝试这样做(上图)还是我应该以编程方式确定B中第一个带有A键=的条目是“先决条件”B?< / p>

我希望能够将PrerequisiteKey存储为单独的字段,但SQL不允许我以这种方式定义表,因为在创建约束之前两个表都需要存在。

编辑:或者,在表创建答案后添加第一个约束?

3 个答案:

答案 0 :(得分:5)

在这些情况下,您通常会创建表,然后添加约束。使用ALTER TABLE语法在创建后更改FK。

ALTER TABLE A 
ADD CONSTRAINT aref FOREIGN KEY PrerequisiteKey  REFERENCES B(BKey);

答案 1 :(得分:1)

您可以创建2个表,然后使用ALTER TABLE和ADD CONSTRAINT来创建约束。

实施例。 :

ALTER TABLE ..
{
    ADD CONSTRAINT ...
}

答案 2 :(得分:0)

通常当我想强制执行1-1关系时,我决定首先输入哪个表,然后使用该表的id作为另一个表的PK(强制执行uniquesness)。然后当然创建Pk / FK关系。如果由于某种原因我不能将它作为PK,我将FK字段inteh表放入并创建一个唯一索引。您不应该尝试在两个表上都有FK(如果SQl Server仍允许它,我会感到惊讶)或者您不能插入任何一个表。