首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >单一遗传还是多态遗传?

单一遗传还是多态遗传?
EN

Stack Overflow用户
提问于 2010-12-10 04:15:56
回答 2查看 386关注 0票数 3

我正在编程一个网站,允许用户张贴分类广告与他们出售的不同类型的项目的详细字段。但是,我有一个关于最佳数据库模式的问题。

该网站具有许多类别(例如,汽车、电脑、相机)和每一类广告都有自己不同的领域。例如,汽车具有车门数量、制造商、型号和马力等属性,而计算机具有CPU、RAM、主板型号等属性。

现在,由于它们都是列表,我正在考虑一种多态的方法,为每个不同的类别(计算机、汽车、相机)创建一个父列表和一个不同的子表。每个子表都有一个链接回LISTINGS表的listing_id。因此,当获取列表时,它将从关联的子表中的链接行连接的列表中获取一行。

代码语言:javascript
复制
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这样的网站会怎么做呢?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2010-12-10 04:28:39

您的数据库设计很好。没有理由去改变你已经拥有的东西。我已经看过几种搜索方法了。一种方法是让搜索存储过程连接所有需要搜索的表,并为要搜索的列建立索引。我见过的第二种方法非常有效,那就是有一个只用于搜索的表,它可以获得需要搜索的任何字段的副本。然后您将在这些字段上放置触发器并更新搜索表。

它们都有缺点,但我更喜欢前者而不是后者。

编辑

您需要以下表格。

类别- Id -描述

CategoriesListingsXref - CategoryId - ListingId

有了这个交叉引用模型,你就可以在搜索过程中加入特定类别的所有列表。然后添加一些动态sql (因为它更容易理解),并构建您的查询,使其包含您想要搜索的字段,并在查询中调用execute。

就这样。

编辑2这似乎是一个更大的讨论,我们可以在这些评论框中找到。但是,我们要讨论的任何事情都可以通过阅读下面的帖子来理解。http://www.sommarskog.se/dyn-search-2008.html

它真的很完整,并向你展示了一种以上的正反两方面的方法。祝好运。

票数 2
EN

Stack Overflow用户

发布于 2010-12-10 04:48:48

我认为您选择的设计将适用于您刚才描述的场景。虽然我不确定子类表是否应该有自己的ID。因为汽车是一个列表,所以这些值来自相同的“域”是有意义的。

在典型的分类广告网站中,广告的数据只写入一次,然后基本上是只读的。您可以利用这一点,并将数据存储在第二组表中,以便按照您希望用户进行搜索的方式进行更优化的搜索。此外,搜索问题实际上只存在于“一般”搜索。一旦用户选择了某种类型的广告,您就可以切换到子类表,以便执行更高级的搜索(RAM >4 4gb,cpu = overpowered)。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4402704

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档