2单个表中的函数依赖关系
问题描述:
我正在尝试基于这两个函数依赖关系创建一个模式。2单个表中的函数依赖关系
A - > B,C,d
乙 - > d
我试图建立一个单一的表既包括这些的FD与以下约束的:
- 一对元组(B,D)可以重复,但遵循FD的定义(每当有两个B值相同,则D值也相同)。
CREATE TABLE one( B INT PRIMARY KEY, D INT NOT NULL, UNIQUE (B, D) ); CREATE TABLE two( A INT PRIMARY KEY, B INT NOT NULL, C INT NOT NULL, D INT NOT NULL, FOREIGN KEY(B, D) REFERENCES one(B, D) );
我只是想知道如果有一个方法可以让我在短短一个表结合这2桌,而无需使用TRIGGERS:现在
,我在2个表如下实施本在Postgresql中?
编辑:
示例数据:
答
我必须学习它自己,但我认为这是你想要的...
CREATE EXTENSION btree_gist;
CREATE TABLE fd (
a INT PRIMARY KEY,
b INT NOT NULL,
c INT NOT NULL,
d INT NOT NULL,
EXCLUDE USING gist (b WITH =, d WITH <>)
);
一个排除约束互相检查所有行,就像UNIQUE
约束检查所有行。但它更广泛。
如果所有支票(b WITH =, d WITH <>)
都是TRUE
则该行被拒绝。
(相反地,这意味着行是唯一可以接受的,如果至少一个检查是FALSE
。)
因此,如果两行具有相同的b
但不同d
的INSERT
或UPDATE
正被运行将失败。
http://dbfiddle.uk/?rdbms=postgres_10&fiddle=5fc308eaaedef4d3d2232ec3d70f3de6
你说的'在短短一个table'结合这两个表是什么意思?你能举出你想要的例子吗,最好包括例子数据? *(我相信我理解你描述的约束条件,我只是不明白最后一点...)* – MatBailie
@MatBailie我的意思是,不是创建2个单独的表,我只是想创建一个包含所有这些属性的表。我用一个例子编辑了这篇文章。 –
好吧,我想你的意思是'我只是想创建一个包含所有这些属性的表格,并且强制执行所有这些约束而不需要第二个表格...... – MatBailie