我正在设计一个有关宠物的分类广告网站,其中包含3个(主要)广告类别:
A- Sale
B- Breeding
C- Jobs
我面临的问题是,所有3个广告类别都有一些共同点,但它们也存在一些差异。
例如,类别A,B和C都有以下共同点:
category_id
ad_id
user_id
location
但是,B类广告不能归类为“寻找/待售”,而B& C可以。此外,每个类别都有自己的子类别。例如,类别A将具有采用子类别和销售子类别&类别C将具有“作业”子类别和“服务”子类别。
他们也会有一些不常见的属性,例如C类中的薪水。
我已经开始将它作为一个实体 - 属性 - 价值模型,但我有几个问题:
这会影响性能吗?因为用户应该能够根据一些独特的属性进行搜索。所以不会通过一个巨大的表来查询影响性能吗?
我的一个属性是“动物”(A& B独有),最初我想要一个Animal表和一个Breed表(类似于Location在分类DB的表中的位置)楷模)。但我无法想象我如何使用entity-attribute-model做到这一点。
以下是我提出的数据库设计:http://i.imgur.com/jyV6Cjc.png
[更新]
在读取类表继承之后,它似乎比EAV模型更合适,所以我将我的EER改为:http://i.imgur.com/JWPjt23.png
招聘广告和销售广告可归类为“寻找/提供”,但属性不会有太多差异,可能只是名称(例如价格与优惠价格)。所以你认为有必要在这里增加另一级继承,还是麻烦?
销售广告可以是宠物出售,宠物收养,请求领养,请求购买宠物。你认为我应该将它们分成两个表。收养和销售?属性没有太大差异,可能只是一个不同的属性。
答案 0 :(得分:1)
您的问题听起来像是类/子类的情况。在对象建模中,设计使用继承的基本机制,以及扩展和修改超类的子类的设计模式。
关系建模与对象建模不同,表格设计与对象设计不同。有几种技术可以帮助缩小差距。此区域中有两个相关的标记single-table-inheritance和class-table-inheritance。我即将冒昧地将这两个标签添加到您的问题中。如果你不喜欢它们,请退一步。