我有如下表格(Postgresql 9.3):
CREATE TABLE tab
(
id integer NOT NULL;
name citext NOT NULL,
isdefault boolean default false
);
我想添加check
,isdefault = True
不接受多条记录triggers
。我知道我可以用Check Constraints
来做,但我读到了 <div class="row" >
<div class="aboutanimate">
<div id="about" class="section scrollspy">
<div class="container">
<h2 class="wow animated shake" style="text-decoration:underline;text-align:center;font-weight:bold;font-family:Comic Sans MS">About Us</h2><br><br>
<div class="quot animated shake">
<h5 style="color:#446CB3;padding-top:30px;text-decoration:underline;font-weight:bold;font-size:35px;font-family:Comic Sans MS">Vision</h5>
<p id="vision">"Lorem ipsem Lorem ipsemLorem ipsemLorem ipsemLorem ipsemLorem ipsem</p>
<h5 style="color:#446CB3;text-decoration:underline;font-weight:bold;font-size:35px;font-family:Comic Sans MS">Mission</h5>
<p id="vision">"Lorem ipsemLorem ipsemLorem ipsemLorem ipsemLorem ipsemLorem ipsem"</p>
<h5 style="color:#446CB3;text-decoration:underline;font-weight:bold;font-size:35px;font-family:Comic Sans MS">Objectives</h5>
<p id="vision">"Lorem ipsemLorem ipsemLorem ipsemLorem ipsemLorem ipsemLorem ipsemLorem ipsem"</p><br><br><br>
</div>
</div>
</div>
</div><br><br>
,并想知道是否可以用它完成。
答案 0 :(得分:3)
使用部分唯一索引:
create unique index on tab (isdefault)
where isdefault ;
这样您也可以在该列中存储false
。我个人更喜欢将boolean
列设置为not null
,这样我就不必在布尔表达式中处理null
值,而只需处理true
或false
。< / p>
where
子句导致仅使用isdefault = true
索引 行。 isdefault = false
(或null)的行未编入索引。因此索引永远不会包含多行。
索引列在这里并不重要。如果您经常查询名称列(对于该单行),您可能希望在该列上创建索引,以便查询可以从索引中获取所有内容。
答案 1 :(得分:0)
添加UNIQUE约束。 (有一个TRUE值,其余为NULL。)
{{1}}
检查约束只是为了确保isdefault为TRUE(一行)或NULL。