【发布时间】:2012-07-21 03:43:36
【问题描述】:
我正在尝试创建一个包含设备列表的数据库。所有的设备都会有某些共同的属性(例如制造商、型号#、序列号等),然后还有特定于某个设备的其他属性(即调制解调器将具有访问权限#,而太阳能电池板将具有输出能力)。我不确定如何用良好的数据库设计原则来表示这些不断变化的属性,我尝试过在网上搜索,但我不完全确定要搜索什么。
我提出了以下可能的解决方案以及我对它们的初步想法:
拥有一个包含所有可能属性的大表,并在不适用的地方放置 null。显然,这有一些缺陷。
每个设备类型都有一个单独的表格。这似乎使用起来可能是一场噩梦,如果我想打印所有设备的列表,我怎么知道要查找哪些表?
拥有一个包含通用属性的表,以及使用外键访问的每种设备类型的其他表,以存储额外的属性。我可能可以完成这项工作,但这会很麻烦,而且感觉不是一个很好的解决方案。
实体-属性-值类型模型。只是看起来不太适合我想做的事情。
我在数据库方面没有很多经验,所以我在这里边学习边学习,任何与此问题相关的链接或有关数据库设计的“必读”文章将不胜感激。谢谢!
编辑: 首先,我发现我需要谷歌“继承映射”,这可能会帮助其他有类似问题的人。为了解决这个问题,我最终使用了#2 和#3 的混合体。它实际上非常简单,运行良好,并且解决了添加额外设备类型的问题,而没有 EAV 的复杂性。感谢所有cmets和建议!
【问题讨论】:
-
查看以下帖子中的答案:stackoverflow.com/questions/870808/…
-
这篇文章与我读到的其他一些文章相矛盾,说应该避免使用 EAV,有人觉得吗?
标签: mysql database database-design