分层数据库模型



我正在设计一个关于宠物的分类广告网站,该网站将有 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独有的),最初我想有一个动物表和一个品种表(类似于分类数据库模型的位置在自己的表中)。但我无法想象如何使用实体-属性-模型来做到这一点。

这是我提出的数据库设计: https://i.stack.imgur.com/x8zOS.png

[更新]

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

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

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

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

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

最新更新