分层数据库模型

时间:2014-11-16 19:33:48

标签: database database-design database-schema single-table-inheritance class-table-inheritance

我正在设计一个有关宠物的分类广告网站,其中包含3个(主要)广告类别:

A- Sale
B- Breeding
C- Jobs

我面临的问题是,所有3个广告类别都有一些共同点,但它们也存在一些差异。

例如,类别A,B和C都有以下共同点:

category_id
ad_id
user_id
location

但是,B类广告不能归类为“寻找/待售”,而B& C可以。此外,每个类别都有自己的子类别。例如,类别A将具有采用子类别和销售子类别&类别C将具有“作业”子类别和“服务”子类别。

他们也会有一些不常见的属性,例如C类中的薪水。

我已经开始将它作为一个实体 - 属性 - 价值模型,但我有几个问题:

  1. 这会影响性能吗?因为用户应该能够根据一些独特的属性进行搜索。所以不会通过一个巨大的表来查询影响性能吗?

  2. 我的一个属性是“动物”(A& B独有),最初我想要一个Animal表和一个Breed表(类似于Location在分类DB的表中的位置)楷模)。但我无法想象我如何使用entity-attribute-model做到这一点。

  3. 以下是我提出的数据库设计:http://i.imgur.com/jyV6Cjc.png

    [更新]

    在读取类表继承之后,它似乎比EAV模型更合适,所以我将我的EER改为:http://i.imgur.com/JWPjt23.png

    1. 招聘广告和销售广告可归类为“寻找/提供”,但属性不会有太多差异,可能只是名称(例如价格与优惠价格)。所以你认为有必要在这里增加另一级继承,还是麻烦?

    2. 销售广告可以是宠物出售,宠物收养,请求领养,请求购买宠物。你认为我应该将它们分成两个表。收养和销售?属性没有太大差异,可能只是一个不同的属性。

1 个答案:

答案 0 :(得分:1)

您的问题听起来像是类/子类的情况。在对象建模中,设计使用继承的基本机制,以及扩展和修改超类的子类的设计模式。

关系建模与对象建模不同,表格设计与对象设计不同。有几种技术可以帮助缩小差距。此区域中有两个相关的标记。我即将冒昧地将这两个标签添加到您的问题中。如果你不喜欢它们,请退一步。