我创建了这样的表:
BEGIN;
CREATE TABLE tag (
id SERIAL,
name VARCHAR(255) UNIQUE NOT NULL,
description VARCHAR(511) NOT NULL DEFAULT '',
PRIMARY KEY(id)
);
CREATE TABLE fandom (
id SERIAL,
name VARCHAR(255) UNIQUE NOT NULL,
link TEXT UNIQUE NOT NULL,
PRIMARY KEY(id)
);
CREATE TABLE character (
fandom_id INT REFERENCES fandom(id), -- allowed to be null
link TEXT UNIQUE,
PRIMARY KEY(id)
) INHERITS (tag);
COMMIT;
接下来我做类似的事情
INSERT INTO tag (name) VALUES ('John Doe')
在插入时,我不知道“John Doe”是否是一个字符,但我可以稍后检查。我想做类似的事情
BEGIN;
DELETE FROM tag WHERE name='John Doe';
INSERT INTO character (name) VALUES ('John Doe');
COMMIT;
在我看来,问题在于第二个“John Doe”的 ID 会增加,现在如果删除有效的话,通过 ID 引用标签“John Doe”的所有外键都会减少 1。
有没有办法简单地将“John Doe”行从“标签”移动到“字符”?
我是一个数据库菜鸟,所以欢迎在评论中补充说明。
结果继承的表在表之间不共享 UNIQUE 修饰符,这意味着您可以首先在“字符”中创建新条目,然后使用新 ID 更新外键,然后删除“标签”中的旧条目。
顺便说一句,UNIQUE 修饰符也不会被继承,这意味着“名称”在“字符”表中不再是唯一的。