【问题标题】:Designing media and lesson tables for two 1:n relationships为两个 1:n 关系设计媒体和课桌
【发布时间】:2017-03-18 00:08:03
【问题描述】:

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

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

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

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

【问题讨论】:

  • 你关注的设计方法是什么?如果您不关注一个,您希望如何完成任何事情?

标签: database-design foreign-keys relationship


【解决方案1】:

为什么两个人都需要身份证?

[媒体] -> Id、LessonId、名称、...

[课程] -> ID、名称、...

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

【讨论】:

  • 两个表都相互关联。我必须。
  • 我不明白为什么你必须有双重关系..但我会在 [MediaLesson] -> MediaId,LessonId 之间制作一个表格
【解决方案2】:

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,那个盖子可能与另一个中间参与吗?反之亦然?课程/媒体中的每个盖子/中间是否都必须出现在任何内容中?所选择的谓词跟随的约束以及可能出现的应用情况。

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

【讨论】:

    猜你喜欢
    • 2013-11-20
    • 2011-08-23
    • 1970-01-01
    • 1970-01-01
    • 2011-03-09
    • 2018-03-31
    • 1970-01-01
    • 2016-02-08
    • 1970-01-01
    相关资源
    最近更新 更多