MS access使用2个外键并仅允许另一个外键的子集

时间:2016-09-19 18:56:34

标签: database ms-access foreign-keys ms-access-2007

我正在使用MS访问来构建3个表之间的关系。我只列出了重要的列

表A具有主键akey

表B具有来自表A akey 的主键bkey和外键作为AF

表C具有主键ckey和另外2列AC和BC。

AC是来自akey的外键(表A)。 BC是表B bkey中的外键。

BC是可选字段。因此,如果BC被填充,则只允许来自bkey的那些AF具有等于AC的值。

知道如何建立这种关系吗?

1 个答案:

答案 0 :(得分:0)

首先,在整个模式中保持您的属性名称一致,例如不要根据使用的表重命名akey,而是在使用它的所有表中使用名称akey

其次,避免'可选'列,SQL空值并不值得所有麻烦。我建议的替代方法是使用第四个表(名为C的第二个C2表)作为可选关系,即( ckey, akey )的值是否为( ckey, bkey )C没有值然后在C2中插入一行,在VIEW中插入一行。

遵循上述两个常识性建议,架构变得相当简单(是的,列会重复,但需要能够强制执行约束,因此不会多余 - 您可以查询它们' 39;使用CREATE TABLE A ( akey INT NOT NULL UNIQUE ); CREATE TABLE B ( bkey INT NOT NULL UNIQUE, akey INT NOT NULL REFERENCES A ( akey ), UNIQUE ( bkey, akey ) ); CREATE TABLE C ( ckey INT NOT NULL UNIQUE, akey INT NOT NULL REFERENCES A ( akey ), UNIQUE ( ckey, akey ) ); CREATE TABLE C2 ( ckey INT NOT NULL, akey INT NOT NULL, FOREIGN KEY ( ckey, akey ) REFERENCES C ( ckey, akey ), bkey INT NOT NULL, FOREIGN KEY ( bkey, akey ) REFERENCES B ( bkey, akey ), UNIQUE ( ckey, akey, bkey ) ); ):

{{1}}
相关问题