【发布时间】:2021-04-25 18:37:56
【问题描述】:
我有两张桌子:
Book(BookID, Title, Author, Decision)
BookShipment(BookID, ShipmentID)
CREATE TABLE BookShipment(
BookID CHAR(4),
ShipmentID(7)
CONSTRAINT pk_BookShipment PRIMARY KEY (BookID, ShipmentID),
CONSTRAINT fk_BookShipment_Book FOREIGN KEY (BookID) REFERENCES Book(BookID));
我们的想法是,在将图书添加到货件之前需要“批准”。如果是“拒绝”,则不会添加。
有没有办法向BookShipment 添加一个额外的约束,当添加一个新的BookID 时,会检查Book 表下的Decision 是否等于Approved(对于那个@987654331 @)?
【问题讨论】:
-
这能回答你的问题吗? Sub queries in check constraint
-
@astentx 看起来可能。然而,看起来好像操作没有在他的表中设置外键,而我有 - 所以不确定我是否需要创建子查询或函数。我认为使用
CHECK功能可能会起作用,但我不确定如何实现它。 -
在表
BookID上有一个主键BookShipment看起来不对。这意味着您只能运送一本书一次;永远。 -
@AaronWright 否,this is the limitation:是用于 CHECK 约束的逻辑表达式,返回 TRUE 或 FALSE。与 CHECK 约束一起使用的logical_expression 不能引用另一个表,但可以为同一行引用同一表中的其他列。表达式不能引用别名数据类型。很少的描述
-
@Larnu 认为我在外面输入时犯了一个错误。主键应该是
(BookID, ShipmentID)
标签: sql sql-server database-design