我正在设计一个关于宠物的分类网站,该网站将包含 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 来说是唯一的),最初我想要一个动物表和一个品种表(类似于分类数据库模型中的位置在其自己的表中)。但我无法想象如何使用实体属性模型来做到这一点。
这是我提出的数据库设计:https://i.stack.imgur.com/x8zOS.png https://i.stack.imgur.com/x8zOS.png
[Update]
在阅读了类表继承之后,它似乎比 EAV 模型更适合,所以我将 EER 更改为:https://i.stack.imgur.com/RvzWP.png https://i.stack.imgur.com/RvzWP.png
招聘广告和销售广告可以归类为“寻找/提供”,但属性上不会有太多差异,可能只是它们的名称(例如价格与首选价格)。那么你认为这里是否有必要再添加一层继承,或者会很麻烦吗?
销售广告可以是出售宠物、领养宠物、请求领养、请求购买宠物。您认为我应该将它们分成两个表吗?收养和出售?属性不会有太大区别,可能只是一种属性不同。
你的问题听起来像是类/子类的情况。在对象建模中,设计使用继承的基本机制,以及扩展和修改超类的子类的设计模式。
关系建模不同于对象建模,表设计也不同于对象设计。有一些技术可以帮助弥补这一差距。该区域有两个相关标签,单表继承 /questions/tagged/single-table-inheritance and 类表继承 /questions/tagged/class-table-inheritance。我将冒昧地将这两个标签添加到您的问题中。如果您不喜欢它们,请将它们退回。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)