ERD关系

时间:2014-12-16 19:28:52

标签: sql erd

我在使用这些值设置数据库表时遇到问题。一切都在正确的表格中,因为,如果他们不是,那么有人可以帮助我并告诉我正确吗?我只需要澄清一下。谢谢!

My database

查看所有答案,它们都非常有用,但我只能选择一个!

3 个答案:

答案 0 :(得分:2)

你的外键看起来好像是在错误的牌桌上。

  • 用户是否购买了艺术家或专辑?可能是一张专辑,因此购买表应该有一个专辑ID而不是艺术家ID。购买表还应具有用户ID,以跟踪用户购买的内容。
  • 你可以说一个艺术家属于一个特定的类型,但有些艺术家每隔几年换一个类型。说一张专辑有一个类型可能会更好,并将Genre id外键放在Album表中。
  • 类型表不应具有相册ID。您的流派表中的每个记录都不会有一个与之关联的专辑。这种关系是相反的。每张专辑都属于一种类型,因此Genre id外键应该在Album表中,如上一点所示。
  • “相册”表应具有艺术家ID外键,而不是相反。

通常,实现此目的的方法是考虑一个表中有多少记录需要引用另一个表中的记录。如果艺术家发行了十张专辑,则您无法将所有十张专辑ID放在艺术家表格的一条记录中。对于这些ID,您需要十列,这没有任何意义。相反,您想要跟踪哪个艺术家在专辑表中记录了专辑。只需要在专辑表中为艺术家ID添加一列额外的列。

答案 1 :(得分:2)

首先想到的是,用后缀Tbl标记每个表是多余的。我们知道它的桌子,对此没有任何困惑。例如,将其称为userspurchases就足够了。关于那些表的主键,也可以这样说。例如,您不需要调用相册表AlbumID的主键ID列,因为它永远不会在它所属的表的上下文之外引用。您只需将其称为id即可。

您在一些不属于的表格中有一些额外的列。我看到的模式可能表明您并未完全依赖关系的运作方式。我会指出几个有混合的地方,这应该给你一个足够坚实的基础来审查其余的表并找到其他错误。

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

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

快速注释:除非您的系统用于跟踪奴隶劳工,否则我认为ArtistID中的PurchaseTbl实际上应该是AlbumID,因为用户最有可能购买一张专辑,而不是一个人。

答案 2 :(得分:2)

首先,您不需要在桌面上使用tbl的后缀。他们在您的数据库中,我们知道他们的桌子,保存自己的输入。其次,您正在引用规范化。有不同的规范化层次,有些在我看来太过分了。基本上,您希望将用户与他们的购买联系起来。他们的购买将链接到专辑,其中有专辑和艺术家。如果您的关系可以通过许多不同的ID进行连接,那么在中间表中链接思考是一个好主意。你正在用你的桌子朝着正确的方向前进,尽管不是所有的都在那里。看看这个ERD,看看它对你有意义。将此图像与来自其他用户的上述建议相结合,您就可以将其整理出来。 :)

enter image description here