是否可以有一个唯一的约束,使得一个特定的列只有一次值?
例如
-----------------------
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)
);
关于Mysql 唯一约束允许单行组合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38016280/