【发布时间】:2016-06-02 19:57:56
【问题描述】:
我需要各位专家的设计建议
所以我有如下表格:
表 1
( A integer not null
, B char(1) not null
, C integer not null
, D not null
, primary key (A, B, C) i.e. composite key
)
表 2
( A integer not null
, B char(2) not null
, C integer not null
primary key (A, B,C) composite key
)
表 3
( A integer not null
, B char(2) not null
, D not null
primary key (A, B, D)
)
我想在表 1 和 2 和表 1 和 3 之间建立关系。
表 1 是父表,表 2 和 3 是表 1 的子表。我可以轻松地在表 1 和表 2 之间创建关系,但是当我尝试在 1 和 3 之间创建关系时出现错误,因为外部key 不能是组合键的一部分,它必须是整个组合键。我非常感谢任何建议。
【问题讨论】:
-
嗯...根据外键的定义,您不能只使用主键的一部分。以您的示例为例,假设您想使用 A 作为外键。但是 Table1 中有 10 行具有该值。外键属于哪一行???这没有逻辑意义。或许如果您能用某种含义而不是 Table1 来解释您的情况,ColA 我们可以提供帮助。
-
缺少一些列类型 - 该 DDL 是否真的运行?
-
如果在表 1 中为列 A、B、D 添加一个
UNIQUE索引,那么这三个列可以用作表 3 的外键...如果这三个在T1 那么它们不构成表中的键,因此它们不能是不同表中的外键。
标签: sql sql-server sql-server-2008