我正在使用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的值。
知道如何建立这种关系吗?
答案 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}}