【发布时间】:2017-03-18 00:08:03
【问题描述】:
【问题讨论】:
-
你关注的设计方法是什么?如果您不关注一个,您希望如何完成任何事情?
标签: database-design foreign-keys relationship
【问题讨论】:
标签: database-design foreign-keys relationship
为什么两个人都需要身份证?
[媒体] -> Id、LessonId、名称、...
[课程] -> ID、名称、...
您可以通过连接查询从课程中获取媒体。
【讨论】:
TL;DR 了解设计。读一本教科书。使用特定的设计方法。这种设计表明您仍然需要学习基础知识。
您的设计不太可能是合适的。我们不能说,因为你告诉我们的不够多。在你的设计中,一个媒体(也许)“有”一堂课(不管你是什么意思)和一个课(也许)“有一个”媒体(不管你是什么意思)。您的消息的其余部分表明您可能想要一张关于媒体的表格、一张关于课程的表格和一张关于您没有解释但称为“有”的一些应用程序关系/关联的表格。您使用引用另一个表的可空 FK 可能不合适,但合适的方法取决于您的表的含义。
一行进入这些表的应用程序标准是什么?您需要首先确定您感兴趣的应用程序关系,并为每个关系确定其特征 predicate--fill-in-the-(named-)blanks 语句由列名参数化的模板——一行在其表中时会变成一个真实的语句。
简单的设计可能是(如果每个媒体、课程和类型都有一个名称):
Media(mname,tname) -- media MNAME is of type TNAME
PK(mname)
Lesson(lname) -- lesson LNAME exists
PK (lname)
Whatever(lname, mname) -- blah lesson LNAME blah blah media MNAME blah
PK (lname, mname)
FK (lname) references Lesson
FK (mname) references Media
如果你想要 ids(为什么?):
Media(mid, name, tid)
PK (mid)
FK (tid) references Type
Type(tid, name)
PK(tid)
Lesson(lid, name)
PK(lid)
Whatever(mid,lid)
FK (lid) references Lesson
FK (mid) references Media
ER 设计方法将调用媒体、课程和类型实体表以及任何关系或关联表。
“基数”有不同的含义,在不同的设计方法中有不同的描述。你用的是哪一个?
更一般地说,您需要告诉我们在给定应用程序的情况下,表值必须具备哪些约束才能有意义。 FK 约束表示表中列列表中的值也必须出现在某个其他位置。如果一个盖子和中间参与Whatever,那个盖子可能与另一个中间参与吗?反之亦然?课程/媒体中的每个盖子/中间是否都必须出现在任何内容中?所选择的谓词跟随的约束以及可能出现的应用情况。
如果某些约束成立,您可能希望重新排列表以记录相同的信息,但更容易强制它们保持,或使新设计的约束更简单,和/或使新设计的表更简单。
【讨论】: