2

对于我的数据库类,我们必须创建一个 ER 并转换为 SQL。我们的 ER 是一个图书馆数据库。如何将“至少一个”约束转换为 SQL?我在谷歌或课堂笔记中找不到它(我没有买教科书..)它由粗线表示:

ER的相关部分

我们试图说图书馆的每个部分(科学、人文、电影)都必须由至少一名员工监督。这是我所拥有的:

员工(pid,罪,薪水,地址

创建表员工

(pid CHAR(9) NOT NULL,

罪 CHAR(9),

工资双倍,

地址 VARCHAR(200),

主键(pid),

外键(pid)

参考人)

部分(sid、名称、位置)

创建表部分

(sid CHAR (11) NOT NULL,

名称 CHAR (20),

位置 CHAR (35),

主键 (sid))

Supervised_by(pid, sid,)

CREATE TABLE Supervised_by

(pid CHAR(9) NOT NULL,

sid CHAR(9) 非空,

主键(pid,sid),

外键(pid)

参考员工,

外键 (sid)

参考部分)

4

2 回答 2

2

由于许多现实世界的原因,至少有一个约束是有问题的。答案是没有简单的方法可以做到这一点。但是有一些方法可以做到这一点,但它们很少使用。您遇到的最大问题是时间问题。您通常会要求在员工之前输入主管记录,因此您只能在提交时检查至少一个约束。这使得调试更加困难。本质上,这在语句级别上是行不通的。

第二个坏消息是,由于上述问题,没有标准的方法来执行此操作,因此通常您正在考虑以不完全声明性且不完全可移植的方式进行一些扩展的 SQL 编程。

例如,在 PostgreSQL 中,您可以编写一个在提交时检查的可延迟约束触发器。在其他数据库中,方法可能会有所不同。

于 2013-01-29T06:11:40.640 回答
1

最好的解决方案是使用您的应用程序管理此约束。没有标准的 SQL 方法可以做到这一点,例如使用 chack 约束,但这里是个坏主意:它会增加比实用程序更多的复杂性。

于 2013-02-08T13:40:29.413 回答