如何实现概念性想法:
“文章至少有一位作者”
引用似乎在本质上是循环的,即ArticleAuthors引用文章,但是条款也必须引用ArticleAuthors ......
create domain Email varchar;
create table Authors(
authorEmail Email primary key,
authorName varchar not null
);
create table ArticleAuthors(
article int references Article,
author varchar references Authors,
primary key (article, author)
)
create table Article(
articleID int primary key,
articleAuthors ??? not null
)
即我应该代替???
答案 0 :(得分:2)
在SQL RDBMS中,通常不能同时在两个表上插入。所以你不能严格执行。
您通常会定义一些存储过程来处理整个事务。
所以Article
不需要引用Authors
。
FUNCTION (articleID, authors[])
if authors is null then exit function;
START TRANSACTION
INSERT INTO Article
INSERT INTO ArticleAuthors
END TRANSACTION
您还需要DELETE on Authors
的触发器,以确保您不会从一篇文章中删除所有作者。
答案 1 :(得分:1)
SQL DBMS通常无法实现这种"至少一个"仅使用DDL的表之间的约束。原则上,答案可能是使用CREATE ASSERTION并推迟约束检查,直到两个表都更新为止。大多数SQL DBMS(我所知道的所有)都不会允许这样做。它实际上是SQL的限制,因为SQL不支持多表更新。