Mysql 唯一约束允许单行组合
shangdawei
阅读:41
2024-09-07 23:24:14
评论:0
是否可以有一个唯一的约束,使得一个特定的列只有一次值?
例如
-----------------------
name | price | default
-----------------------
XYZ | 20 | TRUE
-----------------------
XYZ | 30 | FALSE
-----------------------
XYZ | 40 | FALSE
-----------------------
ABC | 50 | FALSE
-----------------------
所以在上表中,对于特定的
name
值(value),
default
value 只能为 TRUE 一次。并且将对名称和价格列有唯一的约束。
这可能吗?
请您参考如下方法:
normal这样做的方法是提取一个单独的表来保存默认价格:
CREATE TABLE price (
name VARCHAR(255),
price INT,
PRIMARY KEY (name, price)
) ;
CREATE TABLE defaultPrice (
name VARCHAR(255),
price INT,
PRIMARY KEY (name),
FOREIGN KEY(name, price) REFERENCES price(name, price)
);
大多数人会建议引入代理键:
CREATE TABLE item (
id INT PRIMARY KEY,
name VARCHAR(255),
UNIQUE(name)
);
CREATE TABLE price (
itemId INT,
price INT,
PRIMARY KEY (itemId, price),
FOREIGN KEY (itemId) REFERENCES item (id)
) ;
CREATE TABLE defaultPrice (
itemId INT,
price INT,
PRIMARY KEY (itemId),
FOREIGN KEY (itemId, price) REFERENCES price (itemId, price)
);
声明
1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。