我有两个表
- A: id, email,…(电子邮件可以有副本)
- B: id, email,…(邮箱唯一)
我想只允许在a中已经存在的电子邮件的B中的新条目
是否有一些方法可以通过fk或我需要某种触发器?
您可以在表B的这个Email列上添加外键约束,以保持它的完整性。
ALTER TABLE B ADD CONSTRAINT fk_email
FOREIGN KEY ( EMAIL ) REFERENCES A ( EMAIL );
唯一的电子邮件应该存储在一个单独的表X
:
CREATE TABLE X (email VARCHAR(255) PRIMARY KEY);
,或者更好的:
CREATE TABLE X (id INTEGER PRIMARY KEY, email VARCHAR(255) UNIQUE);
那么,表A
和B
都应该有一个列email
或email_id
引用表X
的email
或id
:
CREATE TABLE A (id INTEGER PRIMARY KEY, email VARCHAR(255) REFERENCES X(email));
CREATE TABLE B (id INTEGER PRIMARY KEY, email VARCHAR(255) REFERENCES X(email));
或:
CREATE TABLE A (id INTEGER PRIMARY KEY, email_id INTEGER REFERENCES X(id));
CREATE TABLE B (id INTEGER PRIMARY KEY, email_id INTEGER REFERENCES X(id));