【发布时间】:2014-11-16 19:33:48
【问题描述】:
我正在设计一个关于宠物的分类广告网站,其中包含 3 个(主要)类别的广告:
A- Sale
B- Breeding
C- Jobs
我面临的问题是所有 3 个广告类别都有一些共同点,但也存在一些差异。
例如,类别 A、B 和 C 都有以下共同点:
category_id
ad_id
user_id
location
但是,B 类广告不能归类为“正在寻找/出售”,而 B 和 C 类广告可以。此外,每个类别都有自己的子类别。例如,类别 A 将具有采用子类别和销售子类别,类别 C 将具有工作子类别和服务子类别。
他们还会有一些不常见的属性,例如 C 类中的薪水。
我已经开始将其作为实体-属性-价值模型进行研究,但我有几个担忧:
这会影响性能吗?因为用户应该能够根据一些独特的属性进行搜索。那么查询一张大表不会影响性能吗?
我的一个属性是“Animal”(A 和 B 独有),最初我想要一个 Animal 表和一个 Breed 表(类似于 Location 如何在分类数据库模型的自己的表中)。但我无法想象如何使用实体属性模型来做到这一点。
这是我想出的数据库设计:http://i.imgur.com/jyV6Cjc.png
[更新]
在阅读类表继承后,它似乎比 EAV 模型更适合,所以我将 EER 更改为:http://i.imgur.com/JWPjt23.png
招聘广告和销售广告可以归类为“寻找/提供”,但在属性上不会有太多差异,可能只是它们的名称(例如价格与首选价格)。那么您认为是否有必要在此处添加另一个级别的继承,还是会很麻烦?
销售广告可以是出售宠物、收养宠物、申请收养、申请购买宠物。你认为我应该把这些分成两张表吗?收养和销售?属性不会有太大区别,可能只是一个不同的属性。
【问题讨论】:
-
您没有为数据分析师指定足够的信息来做出设计决策。如果该字段在大多数情况下都不会为空,则您的广告表中可以有可为空的字段。您还可以为唯一字段设置entity - attribute - value model。
-
谢谢吉尔伯特,我添加了更多细节来澄清和指定我的问题。你能看看编辑并帮助我吗?
标签: database database-design database-schema single-table-inheritance class-table-inheritance