sql需要n:m关系

时间:2015-10-15 16:12:34

标签: sql relational-database

如何实现概念性想法:

“文章至少有一位作者”

引用似乎在本质上是循环的,即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
       )

即我应该代替???

2 个答案:

答案 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不支持多表更新。