【发布时间】:2011-05-23 02:36:38
【问题描述】:
我正在编写一个网站,允许用户发布分类广告,其中包含他们销售的不同类型商品的详细字段。不过,我有一个关于最佳数据库架构的问题。
该网站具有许多类别(例如汽车、计算机、相机),并且每个类别的广告都有自己不同的字段。例如,汽车具有门数、品牌、型号和马力等属性,而计算机具有 CPU、RAM、主板型号等属性。
现在因为它们都是列表,所以我正在考虑一种多态方法,为每个不同的类别(计算机、汽车、相机)创建一个父 LISTINGS 表和一个不同的子表。每个子表都有一个listing_id,它将链接回列表表。因此,当获取列表时,它将从 LISTINGS 中获取一行,该行由关联子表中的链接行连接。
LISTINGS
-listing_id
-user_id
-email_address
-date_created
-description
CARS
-car_id
-listing_id
-make
-model
-num_doors
-horsepower
COMPUTERS
-computer_id
-listing_id
-cpu
-ram
-motherboard_model
现在,这个模式是一个好的设计模式还是有更好的方法来做到这一点?
我考虑过单继承,但很快就放弃了这个想法,因为表会变得太大太快,但随后又想到了另一个难题 - 如果用户对所有列表进行全局搜索,那么这意味着我将不得不分别查询每个子表。如果我有超过 100 个不同的类别会发生什么,会不会效率低下?
我还想到了另一种方法,其中有一个定义每个类别中的字段的主表(元表)和一个存储每个列表的字段值的字段表,但这会违反数据库规范化吗?
像 Kijiji 这样的网站是如何做到的?
【问题讨论】:
标签: polymorphic-associations single-table-inheritance database-schema table-structure