【问题标题】:Hierarchical database model分层数据库模型
【发布时间】: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 类中的薪水。

我已经开始将其作为实体-属性-价值模型进行研究,但我有几个担忧:

  1. 这会影响性能吗?因为用户应该能够根据一些独特的属性进行搜索。那么查询一张大表不会影响性能吗?

  2. 我的一个属性是“Animal”(A 和 B 独有),最初我想要一个 Animal 表和一个 Breed 表(类似于 Location 如何在分类数据库模型的自己的表中)。但我无法想象如何使用实体属性模型来做到这一点。

这是我想出的数据库设计:http://i.imgur.com/jyV6Cjc.png

[更新]

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

  1. 招聘广告和销售广告可以归类为“寻找/提供”,但在属性上不会有太多差异,可能只是它们的名称(例如价格与首选价格)。那么您认为是否有必要在此处添加另一个级别的继承,还是会很麻烦?

  2. 销售广告可以是出售宠物、收养宠物、申请收养、申请购买宠物。你认为我应该把这些分成两张表吗?收养和销售?属性不会有太大区别,可能只是一个不同的属性。

【问题讨论】:

  • 您没有为数据分析师指定足够的信息来做出设计决策。如果该字段在大多数情况下都不会为空,则您的广告表中可以有可为空的字段。您还可以为唯一字段设置entity - attribute - value model
  • 谢谢吉尔伯特,我添加了更多细节来澄清和指定我的问题。你能看看编辑并帮助我吗?

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


【解决方案1】:

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

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

【讨论】:

  • 谢谢沃尔特!您的回答为我指明了正确的方向。我阅读了类表继承并修改了我的图表。你能看看它并告诉我你的想法吗?谢谢
猜你喜欢
  • 2011-11-03
  • 1970-01-01
  • 2020-12-09
  • 1970-01-01
  • 2011-08-04
  • 2011-05-19
  • 2012-08-15
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多