[英]ER Diagram Participation Constraints in SQL
我试图理解将 ER 图转换为 SQL CREATE 语句,但我很难理解参与约束是如何工作的。 在 ER 图中,参与约束由粗线表示,这意味着表中的每个元组都必须出现在关系表中。 如果存在参与约束和密钥约束(总计),则有可能满足密钥约束。
是否有一种方法可以在不使用断言或检查约束的情况下强制执行不是关键约束的参与约束?
编辑
与一个特定的例子相比,我对整个概念更加困惑,但我找到了一个例子,我画了一个图表来说明我的困惑。 在下图中,我们有一个参与约束和一个从教授到教师的关键约束; 因此,每个教授必须教 1 节课,而且只能教 1 节课。 可以通过使用 Profess_teach 表而不是使用两个单独的表来强制执行此约束; 通过将教授 ssn 设为主键,professions_teach 表中的每个教授只会有 1 个条目,并且由于它将拥有通常放在教授表中的所有记录,因此每个教授都必须在新表中。
我的困惑在于从课程到老师的参与限制; 基本上该图的意思是每门课程必须至少有一名老师; 我认为不使用断言或检查约束就不能强制执行。
对于这种情况,您不需要关系。
您只需要表老师,并定义字段course_id (unique)
。 在这种情况下,您有老师,他们可以有 0 或 1 门课程。 并且每门课程将只为一名教师授课。
teacher_id (primary key)
teacher_name
ssn
course_id (unique) fk reference courses(course_id)
培训班
course_id (primary key)
course_name
但是您不应该强制每个课程在数据库中都有老师,因为新课程将立即需要老师。 最好是插入课程然后指派老师。
您将关系教学和实体教授合并为:
CREATE TABLE Prof_teaches(
ssn INTEGER,
semesterid INTEGER,
courseID INTEGER NOT NULL,
FOREIGN KEY courseID REFERENCES Course (courseid),
PRIMARY KEY ssn
)
CREATE TABLE Course(
courseid INTEGER PRIMARY KEY
)
这是针对 Ramakrishnan 在书中定义的完全参与和关键约束。 这意味着每个教授(注释,单 f),参与至少(总参与)和至多(关键约束)一个教授关系。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.