gpt4 book ai didi

ms-access - MS Access 中的唯一性约束

转载 作者:行者123 更新时间:2023-12-02 22:53:54 26 4
gpt4 key购买 nike

在我必须为 MS Access 设计的数据库中,我有一个名为“测量”的表,其中存储某些测量参数(测量值、标准偏差等) - 每行都有一个整数 ID 作为其主值关键。

然后其他表使用外键关系链接到此测量表。某些表包含两个不同的“measurementID”字段,它们都链接到这一测量表。但是,每个测量值只能与这些字段中的一个链接。

如何对多个表中的多个字段强制执行唯一性约束?有办法吗?

最佳答案

此类约束确实可以使用 CHECK 在 ACE/JET 中实现限制。

那些说他们通常会使用触发器来完成此类事情的人并没有意识到 CHECK 之间的区别。 ACE/Jet 和 SQL Server 中的约束分别:在 SQL Server 中它们不能包含子查询,这意味着它们不能引用同一表中其他行中的值或其他表,而在 ACE/Jet 中可以。

在理想的(但据我所知还不存在)SQL-92 产品中,所描述的唯一性将使用ASSETION 来实现。 ,处于模式级别。因为 CHECK 约束是表级的,并且仅在定义它们的表为 UPDATE 时才进行检查。 d 或INSERT ed,您需要输入适当的 CHECK对所有引用表的约束(这同样适用于 SQL Server 触发器)。这是一个简单的示例:

CREATE TABLE Parent 
(
parent_ID INTEGER NOT NULL IDENTITY UNIQUE,
data_col INTEGER NOT NULL
)
;
CREATE TABLE Child1
(
parent_ID INTEGER NOT NULL
REFERENCES parent (parent_ID),
data_col INTEGER NOT NULL
)
;
CREATE TABLE Child2
(
parent_ID INTEGER NOT NULL
REFERENCES parent (parent_ID),
data_col INTEGER NOT NULL
)
;
ALTER TABLE Child1 ADD
CONSTRAINT child1__no_dups_in_child2
CHECK (NOT EXISTS (
SELECT *
FROM Child1 AS C1
INNER JOIN Child2 AS C2
ON C1.parent_ID = C2.parent_ID
))
;
ALTER TABLE Child2 ADD
CONSTRAINT child2__no_dups_in_child1
CHECK (NOT EXISTS (
SELECT *
FROM Child1 AS C1
INNER JOIN Child2 AS C2
ON C1.parent_ID = C2.parent_ID
))
;

但是,我想知道您是否有子类(即可以键入 ID 表示的每个实体),在这种情况下您应该能够使用 FOREIGN KEY s 和行级 CHECK约束(或者验证规则,如果您更熟悉 MS Access 接口(interface)而不是 CHECK 约束所需的 SQL DLL)。逻辑会比表级更容易实现 CHECK约束,只需观察 CASCADE 中的周期引用行动。这是另一个简单的例子:

CREATE TABLE Parent 
(
parent_ID INTEGER NOT NULL IDENTITY,
child_type VARCHAR(4) NOT NULL,
CONSTRAINT child_type__values
CHECK (child_type IN ('Boy', 'Girl')),
UNIQUE (child_type, parent_ID)
)
;
CREATE TABLE Girls
(
parent_ID INTEGER NOT NULL,
child_type VARCHAR(4) DEFAULT 'girl' NOT NULL,
CONSTRAINT girl_child_type__must_be_girl
CHECK (child_type = 'girl'),
FOREIGN KEY (child_type, parent_ID)
REFERENCES Parent (child_type, parent_ID),
data_col INTEGER NOT NULL
)
;
CREATE TABLE Boys
(
parent_ID INTEGER NOT NULL,
child_type VARCHAR(4) DEFAULT 'boy' NOT NULL,
CONSTRAINT boy_child_type__must_be_boy
CHECK (child_type = 'boy'),
FOREIGN KEY (child_type, parent_ID)
REFERENCES Parent (child_type, parent_ID),
data_col INTEGER NOT NULL
)
;

关于ms-access - MS Access 中的唯一性约束,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/732274/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com