【问题标题】:ERD Relationships [closed]ERD关系[关闭]
【发布时间】:2014-12-16 19:28:52
【问题描述】:

我无法使用这些值设置我的数据库表。一切都在正确的表格中,因为如果不是,有人可以帮助我并向我展示正确的吗?我只需要澄清一下。谢谢!

查看所有答案,它们都很有帮助,但我只能选择一个!

【问题讨论】:

  • 你有什么烦恼?这是一个非常广泛的问题。设置数据库表没有“对与错”。如果它们符合您的需求,那么问题是什么?
  • AlbumTbl 缺少 AlbumID?只是指出
  • @Volearix 感谢您的回复。对于 ArtistTbl,将 AlbumID 和 GenreID 放在同一个表中并链接到 GenreTbl 和 AlbumTbl 是不好的做法。抱歉,我并没有真正正确地提出问题
  • 好的,我明白你在说什么。我会发布一个答案。
  • 好的,谢谢你。很多

标签: sql erd


【解决方案1】:

首先想到的是,用后缀Tbl 标记每个表是多余的。我们知道它是一张桌子,不会有任何混淆。例如,将其称为userspurchases 就足够了。关于这些表的主键也可以这样说。例如,您不需要调用 Album 表 AlbumID 的主键 id 列,因为它永远不能在它所属的表的上下文之外被引用。你可以直接叫它id

您在一些不属于的表中有许多额外的列。我看到的模式可能表明你并没有完全基于关系的运作方式。我将指出几个存在混淆的地方,这应该为您提供足够坚实的基础来查看其余表格并找出其他错误。

查看UserTbl 表,您有购买的ID (Purcahse_ID)。在现实世界中,这意味着每个用户只能购买一次,而这种情况不太可能发生。更有可能的是,用户可能有很多购买。正如一位教授曾经告诉我的那样,在决定将外键放在哪里时,键总是位于关系的“多”端。因此,在这种情况下,您需要从UserTbl 中删除Purchase_ID,并在PurchaseTbl 中添加User_ID。这样,一个用户可能确实有很多购买,每次购买都包含进行购买的用户的 id。

您在 ArtistTbl 和 GenreTbl 中有类似的问题。看看您是否可以确定关系的外观。希望这更有意义。

附注:除非你的系统是用来跟踪奴隶劳动的,否则我相信PurchaseTbl 中的ArtistID 实际上应该是AlbumID,因为用户很可能购买专辑,而不是购买人。

【讨论】:

  • 购买表中说的user_id是指UserTbl主键(id)吗? FK?也谢谢你的回答
  • @notc1 正确,这就是该列所指的内容。通常(可以说,大多数时候)你用它引用的表的名称来命名你的外键(所以user_id,或album_id)。所以主键通常简单命名为id,而另一个表中引用上述主键的外键通常是[table name]_id
  • 谢谢,这真的很高兴知道,我一直把它命名为相同的。 Product_Id -- Product_Id 等 从来没有用其他方式,id -- Product_Id
  • @notc1 是的,如果您像这样调用所有主键,这不是世界末日。但是使用id (PK) 和[table name]_id (FK) 模式(同样可以说)是您将看到的最常见的命名约定。了解某些系统和框架在尝试执行查询时使用该约定可能也很重要,因此,如果您将列命名与他们期望的不同,框架可能会遇到困难(因此您也会遇到困难)。
【解决方案2】:

您的外键看起来大多位于错误的表中。

  • 用户是否购买了艺术家或专辑?可能是一张专辑,因此 Purchase 表应该有一个专辑 ID 而不是艺术家 ID。 Purchase 表还应该有一个 User id 来跟踪是什么用户进行了购买。
  • 你可以说一个艺术家属于一个特定的流派,但有些艺术家每隔几年就会更换流派。最好说一张专辑有一个流派,而是将流派 ID 外键放在专辑表中。
  • 流派表不应有专辑 ID。您的流派表中的每条记录都不会有一个与之关联的专辑。关系是相反的。每张专辑都属于一个流派,因此流派 id 外键应该在 Album 表中,如前所述。
  • Album 表应该有一个 Artist id 外键,而不是相反。

一般来说,做到这一点的方法是考虑一个表中有多少记录需要引用另一个表中的记录。如果一个艺术家发行了十张专辑,您不能将所有十张专辑 id 都放在艺术家表的一条记录中。这些 id 需要十列,这没有意义。相反,您想在专辑表中跟踪哪个艺术家录制了专辑。专辑表中的艺术家 ID 只需多出一列。

【讨论】:

  • 谢谢。这对我也有帮助,我现在了解更多了,没想到我的桌子错了
  • @notc1 这实际上只是你犯了几次的一个错误。 ;)
【解决方案3】:

首先,您的表不需要tbl 的后缀。它们在您的数据库中,我们知道它们是表格,省去打字。其次,您正在引用规范化。标准化有不同的层次,在我看来有些走得太远了。基本上,您希望将您的用户与他们的购买联系起来。他们的购买将链接到具有流派和艺术家的专辑。如果您的关系可以通过许多不同的 id 进行连接,那么在中间表中链接 think 是一个好主意。您的桌子正朝着正确的方向前进,尽管并非所有桌子都在那里。看看这个 ERD,看看它对你是否有意义。将此图像与其他用户的上述建议结合起来,您将得到整理。 :)

【讨论】:

  • 非常感谢,与我相比,能够理解这张桌子的图片很棒。我不知道该标记哪一个作为答案,因为它们都很好
  • @notc1 您认为最能回答问题和/或对您帮助最大的人。
  • 虽然他们都回答了我的问题,但 Volearix 为我制作的图像也确实很有帮助,因为我正在将它与我自己的进行比较,但你的和蜥蜴比尔在指出什么问题时是描述性的
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-03-14
  • 2018-03-15
  • 2015-07-04
相关资源
最近更新 更多