[英]PostgreSQL UNIQUE constraint and REFERENCES
假设我有一个表树和一个表special_tree
CREATE TABLE tree VALUES (name VARCHAR(32) UNIQUE NOT NULL PRIMARY KEY,
type VARCHAR(32) NOT NULL);
CREATE TABLE special_tree VALUES (name NOT NULL REFERENCES tree(name),
treat_date DATE,
id INT NOT NULL PRIMARY KEY);
因此,我有一个表,其中包含具有唯一名称的树的列表,但我想说一棵树可以具有多个“ treat_date”(出于各种原因)。 由于tree(name)是唯一的,因此无法在special_tree中添加2个相同的名称。
唯一的解决方案是从树中删除唯一性,然后在处理树表的所有地方添加一个IF语句,以检查名称是否不存在? (IF EXISTS (SELECT name FROM tree where tree.name = ...))
如果考虑表tree
的列name
,并不意味着所有引用的列也应具有唯一值。 看这个例子
最好的解决方案是(对于MySQL):
CREATE TABLE tree VALUES (
id_t int(11) NOT NULL auto_increment,
name VARCHAR(32) NOT NULL,
type VARCHAR(32) NOT NULL,
CONSTRAINT tree_pk PRIMARY KEY (id_t));
CREATE TABLE special_tree VALUES (
id_st int(11) NOT NULL auto_increment,
id_t NOT NULL REFERENCES tree(id_t),
treat_date DATE,
CONSTRAINT special_tree_pk PRIMARY KEY (id_st));
对于PostgreSQL:
CREATE TABLE tree VALUES (
id_t serial primary key,
name VARCHAR(32) NOT NULL,
type VARCHAR(32) NOT NULL);
CREATE TABLE special_tree VALUES (
id_st serial primary key,
id_t NOT NULL REFERENCES tree(id_t),
treat_date DATE);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.