SQL中的ER图参与约束

时间:2015-10-03 23:17:52

标签: sql

我试图理解将ER图转换为SQL CREATE语句,但我很难理解参与约束是如何工作的。在ER图中,参与约束由粗线表示,这意味着表中的每个元组必须出现在关系表中。如果存在参与约束和关键约束(总计),则可以实现关键约束。

在没有使用断言或检查约束的情况下,是否有某种方法可以强制执行参与约束而不是关键约束?

修改

我对整个概念更加困惑,而不是一个特定的例子,但我能够找到一个例子,我绘制了图表,这将说明我的困惑。在下图中,我们有参与约束和教授对教师的关键约束;因此,每位教授都必须教一个班,只教一个班。这种约束可以通过拥有professors_teach表而不是具有两个单独的表来强制执行;通过让教授ssn成为主键,教授表中每位教授只会有1个条目,并且由于它将具有通常将放在教授表中的所有记录,因此每个教授必须在新表中。

我的困惑在于从课程到教师的参与约束;基本上图表说的是每门课程必须至少有一位老师;我不认为可以在不使用断言或检查约束的情况下强制执行。

enter image description here

2 个答案:

答案 0 :(得分:0)

对于这种情况,你不需要关系。

您只需要表格教师,并定义字段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

但是你不应该强制每个课程都有教师在数据库中,因为新课程需要立即教师。你最好插入课程,然后指派一名老师。

答案 1 :(得分:0)

您将关系Teaches和Entity Professor合并在一起:

CREATE TABLE Prof_teaches(
  ssn INTEGER,
  semesterid INTEGER,
  courseID INTEGER NOT NULL,
  FOREIGN KEY courseID REFERENCES Course (courseid),
  PRIMARY KEY ssn
)

CREATE TABLE Course(
  ssn INTEGER PRIMARY KEY
)

这是由Ramakrishnan所着的全书参与和关键约束。这意味着每个教授(注释,单个f)参与至少(总参与)和最多(关键约束),教会关系。