首页
学习
活动
专区
圈层
工具
发布

ERD关系
EN

Stack Overflow用户
提问于 2014-12-16 19:28:52
回答 3查看 109关注 0票数 0

我在用这些值设置数据库表时遇到了问题。所有的东西都摆在合适的桌子上,因为如果没有,谁能帮我把正确的东西拿给我看吗?我只是需要澄清一下。谢谢!

检查了所有的答案,它们都很有用,但我只能选择一个!

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2014-12-16 19:39:31

第一个想法是,用后缀Tbl标记每个表是多余的。我们知道这是一张桌子,不会有任何混淆。例如,将其命名为userspurchases就足够了。对于这些表的主键也可以这样说。例如,您不需要调用相册表AlbumID的主键id列,因为它永远不能在表所属的表的上下文之外引用。您可以简单地将其命名为id

有些表中有一些不属于的额外列。我看到的模式可能表明你并没有完全建立在人际关系的基础上。我将指出几个地方有一个混淆,这应该给你一个坚实的基础,以审查其余的表,并找到其他错误。

查看UserTbl表,您将获得购买的id (Purcahse_ID)。在现实世界中,这意味着每个用户只能有一个购买,这是不可能的情况。更有可能的是,用户可能会购买许多。正如一位教授曾经告诉我的那样,当决定把外键放在哪里时,钥匙总是放在关系的“许多”方面。因此,在本例中,您将希望从Purchase_ID中删除UserTbl,并在PurchaseTbl中添加一个User_ID。这样,用户可能确实有许多购买,每一次购买都包含购买的用户的id。

在ArtistTbl和GenreTbl中也有类似的问题。看看你能不能确定这种关系应该是什么样的。希望这更有意义。

请注意:除非您的系统是用来跟踪奴隶劳动的,否则我认为PurchaseTbl中的PurchaseTbl实际上应该是AlbumID,因为用户最有可能购买的是专辑,而不是个人。

票数 2
EN

Stack Overflow用户

发布于 2014-12-16 19:39:26

你的外键看上去好像是在错误的桌子上。

  • 用户是否购买艺术家或专辑?可能是一张专辑,所以购买表应该有一个相册id,而不是一个艺术家id。购买表还应该有一个用户id,以跟踪是什么用户进行了购买。
  • 你可以说一个艺术家属于一个特定的类型,但是有些艺术家每隔几年就换一次类型。最好是说一张专辑有一个体裁,并将体裁id外键放在相册表中。
  • “类型”表不应该有专辑id。体裁表中的每一张唱片都不会有一张相关联的专辑。这种关系正好相反。每个专辑都属于一个类型,所以类型id外键应该在相册表中,与前面的内容一样。
  • 相册表应该有一个艺术家id外键,而不是相反。

通常,正确的方法是考虑一个表中有多少个记录需要引用另一个表中的记录。如果艺术家发布了10张专辑,则不能将所有10个专辑If放入艺术家表中的一个记录中。对于这些ids,您需要10列,这是没有意义的。相反,您想要跟踪哪个艺术家在专辑表中记录了该专辑。对于相册表中的艺术家id,它只需要一个额外的列。

票数 2
EN

Stack Overflow用户

发布于 2014-12-16 19:46:38

首先,您不需要表上的tbl后缀。它们在你的数据库里,我们知道它们是表,省得你自己打字。第二,你指的是正常化。有不同层次的正常化,我认为有些太过分了。基本上,你想把你的用户和他们的购买联系起来。他们的购买将链接到专辑,其中有一个流派和艺术家。如果您的关系可以通过许多不同的in连接起来,那么最好将think链接到中间表中。你的桌子正朝着正确的方向前进,虽然并不是所有的都在那里。看看这个ERD,看看它对你是否有意义。将此图像与其他用户的上述建议相结合,您将得到解决。:)

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27512424

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档