假设下表:
<input type='text' value='Hello world' placeholder='Save as .txt' id='save' autofocus='' />
<a id='link' target='_blank' onclick='txt(this);' download='note.txt'><input type='button' value='Save as .txt' /></a>
真正有效的区别是什么:
CREATE TABLE zoo (
cage INTEGER,
animal TEXT,
);
和
ALTER TABLE zoo ADD CONSTRAINT x EXCLUDE USING gist (cage WITH =, animal WITH <>)
我从https://www.postgresql.org/docs/current/static/btree-gist.html获取了这个示例,并且对于他们用CREATE UNIQUE INDEX ON zoo(cage, animal)
代替好老exclude constraint
的原因感到困惑。所以我想知道是否真的存在差异。
答案 0 :(得分:1)
两人做不同的事情。
排除约束正在执行文档所说的内容 - 它保证了一个笼子只有一种类型的动物。笼子里没有狮子和绵羊。
唯一索引/约束表示笼子中没有重复的动物。所以,狮子和羊很好(从那个角度来看)。但是两只狮子或两只羊不是。 (当然,狮子和羊的例子可能很快就会产生令人满意的独特约束)。
可以使用外键约束来处理这种类型的“排除”约束。像这样:
CREATE TABLE cages (
CageId serial,
AnimalType varchar(255) -- or whatever
);
CREATE TABLE CageAnimals (
CageAnimalId serial,
CageId int references Cages(CageId)
AnimalName varchar(255)
);
(在现实生活中,模型会有点复杂。)