是否有可能需要列A或列B有一个值的外键,但不是两者都有。而列A的外键与表1匹配,列B的外键与表2匹配?用于或列的外键?
Q
用于或列的外键?
2
A
回答
4
检查约束可以处理这个问题。如果这是SQL Server中,像这样将工作:
create table A (Id int not null primary key)
go
create table B (Id int not null primary key)
go
create table C (Id int not null primary key, A_Id int null, B_Id int null)
go
alter table C add constraint FK_C_A
foreign key (A_Id) references A (Id)
go
alter table C add constraint FK_C_B
foreign key (B_Id) references B (Id)
go
alter table C add constraint CK_C_OneIsNotNull
check (A_Id is not null or B_Id is not null)
go
alter table C add constraint CK_C_OneIsNull
check (A_Id is null or B_Id is null)
go
1
2
这取决于您正在使用哪个数据库。如果你想要一个具有FK关系的表Foo
到Table1
和Table2
但一次只有一个,那么你需要设置某种trigger(我的链接假设SQL Server,但想法是一样的)或Constraint强制您的规则只有一列有价值。
相关问题
- 1. 标志列或外键?
- 2. 用mysql的外键有可能有一个基于列值的外键?
- 3. 基于2个外键列插入或更新
- 4. 外键 - ID或者只是UNIQUE列
- 5. 复合主键或外键
- 6. Oracle外键或主键
- 7. 具有相同唯一列的表的主键或外键
- 8. 用于在Python或Ruby中自动映射外键的ORM库
- 9. 外键或链接
- 10. 外键或空值
- 11. 外键列
- 12. 空或空的外键
- 13. 一列键或多列键?
- 14. 用外键删除列
- 15. 多列外键引用
- 16. 对主键和外键以外的postgres列使用JSONB
- 17. 关于mysql上的外键
- 18. DB设计:同一列用于2个不同的外键
- 19. C#中用于SQLCE外键的功能
- 20. SQL:用于继承的多个外键
- 21. 用于导轨的外键格式
- 22. 主键 - 用于UUID主键的VARBINARY或BLOB或VARCHAR
- 23. 实体框架核心 - 外键1(额外的外键列)
- 24. 数据库,单独的表或列用于额外的字段?
- 25. 命名外键列
- 26. 外键列问题
- 27. 外键列排序
- 28. EF:多列外键
- 29. 索引外键列
- 30. JPA外键列名
谢谢!这结束了工作:) – appsecguy