为两个1:n关系设计媒体和课程表

时间:2016-11-04 08:09:14

标签: database-design foreign-keys relationship

我正在设计一个包含三个表的数据库。

它的媒体表在某种类型的媒体中有n课(1:n关系)。

每节课都有一些媒体(1:n关系)。

这是正确的设计吗?这个问题还有另一个解决方案吗?

enter image description here

2 个答案:

答案 0 :(得分:0)

为什么你需要在两者中都有ID?

[媒体] - > Id,LessonId,Name,...

[课程] - > Id,Name,...

您可以通过联接查询从课程中获取媒体。

答案 1 :(得分:0)

TL; DR了解设计。读一本教科书。致力于特定的设计方法。这种设计表明你仍然需要学习基础知识。

您的设计不太可能合适。我们不能说,因为你没有告诉我们足够的。在您的设计中,媒体(可能)"有一个"课程(无论你的意思是什么)和一堂课(也许)"有一个"媒体(无论你的意思是什么)。你的其他信息表明你可能想要一个关于媒体的表格,一个关于课程的表格以及一些关于某些应用程序关系/关联的表格,你还没有解释过这些关系/关联,并且有一个"有一个"。您使用引用其他表的可空FK可能不合适,但适当的取决于表的含义。

行进入其中任何一个表的应用程序标准是什么?您需要首先识别您感兴趣的应用程序关系,并确定每个特征谓词 - 填写(命名)空白语句由列名参数化的模板 - 当一行在其表中时成为真实的语句。

直接设计的设计可能是(如果每个媒体,课程和类型都有一个名称):

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

如果你想要ID(为什么?):

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设计方法将调用Media,Lesson和Type实体表以及无论是关系还是关联表。

"基数"意思是不同的东西,在不同的设计方法中有不同的描述你在用哪一个?

更一般地说,您需要告诉我们在给定应用程序的情况下,表值必须具有哪些约束才能有意义。 FK约束表示表中列列表中的值也必须出现在某个其他位置。如果一个盖子和mid参加Whatever,那个盖子可能会与另一个中间人分开吗?反之亦然? Lesson / Media中的每个lid / mid是否必须出现在Whatever中? constaints 跟随选择的谓词以及可能出现的应用情况。

如果某些约束成立,您可能需要重新排列表格以记录相同的信息但更容易强制它们保持,或者使新设计的约束更简单,和/或制作新的约束设计表格更简单。