访问SQL以创建一对多关系而不强制参照完整性

时间:2015-05-05 02:02:30

标签: sql ms-access constraints

我有这种关系。我必须暂时销毁它只是为了使用SQL命令改变“salID”字段的大小:

ALTER TABLE Adressen DROP CONSTRAINT [ChildTableMainTable]

I need to restore this original relation

如何使用SQL命令重新创建相同的关系类型? 如果我使用下一个SQL,我会得到一对多的关系。这不是我需要的:

ALTER TABLE MainTable ADD CONSTRAINT [ChildTableMainTable] FOREIGN KEY (salID) REFERENCES [ChildTable] (ChildPK);

I dont need Enforce Referential Integrity

2 个答案:

答案 0 :(得分:9)

据我所知,Access DDL根本不支持创建Access"关系"没有"强制参照完整性"。 CREATE CONSTRAINT将创建一个关系"强制参照完整性"因为这就是这样一种关系:参考完整性约束

ON UPDATE的{​​{1}}和ON DELETE条款控制"级联更新相关字段"和#34;级联删除相关记录&#34的值;“编辑关系”对话框中的复选框,但它们不控制"强制参照完整性"复选框本身的值。)

换句话说,没有"强制参照完整性的关系"根本不是约束。它只是一个提示"这些表通过指定的字段相关,例如,如果将表添加到查询设计中,查询生成器可以自动连接表。

创建没有"强制参照完整性的关系"你需要使用Access DAO。对于像这样的关系

EditRelationships.png

VBA中所需的代码是

CREATE CONSTRAINT

答案 1 :(得分:1)

首先,你的" Cihld" (有人真的拼错了Child那么糟糕并将其留在架构中吗?)表实际上是表,而Main表是表,根据定义的关系:子表的外键列被约束为具有来自父表的主键值。这种混合,加上拼写错误强烈暗示一团糟。

尽管如此,允许将外键列定义为可空(即使用NOT NULL修饰符定义它们)。执行此操作,只需将外键列设置为NULL您想要不约束回父表的行。