- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在编写一个网站,允许用户发布分类广告,其中包含他们销售的不同类型商品的详细字段。但是,我对最佳数据库模式有疑问。
该网站有许多类别(例如汽车、计算机、相机),每个类别的广告都有自己不同的领域。例如,汽车具有门数、品牌、型号和马力等属性,而计算机具有 CPU、RAM、主板型号等属性。
既然它们都是列表,我正在考虑一种多态方法,为每个不同的类别(电脑、汽车、相机)创建一个父列表和一个不同的子表。每个子表都有一个 listing_id,它将链接回 LISTINGS TABLE。因此,当获取列表时,它会从关联子表中的链接行连接的 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 这样的网站会怎么做?
最佳答案
您的数据库设计很好。没有理由改变你所拥有的。我已经看到搜索是通过几种方式完成的。一种是让您的搜索存储过程连接您需要搜索的所有表,并对要搜索的列建立索引。我看到它完成的第二种方法非常有效,是有一个仅用于搜索的表,它获取需要搜索的任何字段的副本。然后您可以在这些字段上放置触发器并更新搜索表。
它们都有缺点,但我更喜欢第一个。
编辑
您需要以下表格。
类别- ID- 说明
CategoriesListingsXref- CategoryId- list 编号
使用此交叉引用模型,您可以在搜索过程中加入给定类别的所有列表。然后添加一些动态 sql(因为它更容易理解)并构建您的查询以包含您要搜索的字段并在您的查询上调用执行。
就是这样。
编辑 2这似乎是一个更大的讨论,我们可以在这些评论框中找到。但是,我们将讨论的任何内容都可以通过阅读以下帖子来理解。 http://www.sommarskog.se/dyn-search-2008.html
它真的很完整,并向您展示了不止一种方法,并且有优缺点。祝你好运。
关于polymorphic-associations - 单继承还是多态?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4402704/
我来自 Asp.Net 世界,试图理解 Angular State 的含义。 什么是 Angular 状态?它类似于Asp.Net中的ascx组件吗?是子页面吗?它类似于工作流程状态吗? 我听到很多人
我一直在寻找 3 态拨动开关,但运气不佳。 基本上我需要一个具有以下状态的开关: |开 |不适用 |关 | slider 默认从中间开始,一旦用户向左或向右滑动,就无法回到N/A(未回答)状态。 有人
我是一名优秀的程序员,十分优秀!