当前位置:  开发笔记 > 数据库 > 正文

这个问题的最佳实践是什么(不同类别的不同属性)?

如何解决《这个问题的最佳实践是什么(不同类别的不同属性)?》经验,为你挑选了2个好方法。

我有一些产品属于某个类别.

每个类别可以具有不同的属性.

例如,

类别汽车具有属性颜色,功率,...

类别宠物有属性 重量,年龄,...

类别数量约为10-15.每个类别的属性数量为3-15.产品数量非常大.

这个应用程序的主要要求是非常好的搜索.我们将选择类别,并为此类别中的每个属性输入标准.

必须为此方案设计数据库.(SQL Server 2005)



1> Tomalak..:

经典的设计方法是(星号表示主键列):

Product
  ProductId*
  CategoryId: FK to Category.CategroyId
  Name

Category
  CategoryId*
  Name

Property
  PropertyId*
  Name
  Type

CategoryProperty
  CategoryId*: FK to Category.CategoryId
  PropertyId*: FK to Property.PropertyId

ProductProperty
  ProductId*: FK to Product.ProductId
  PropertyId*: FK to Property.PropertyId
  ValueAsString

如果您可以接受这样的事实:每个属性值都将作为字符串传递给DB,并且类型转换信息存储在Property表中,则此布局就足够了.

查询将是这样的:

SELECT
   Product.ProductId,
   Product.Name AS ProductName,
   Category.CategoryId,
   Category.Name AS CategoryName,
   Property.PropertyId,
   Property.Name AS PropertyName,
   Property.Type AS PropertyType,
   ProductProperty.ValueAsString
FROM
   Product 
   INNER JOIN Category         ON Category.CategoryId = Product.CategoryId
   INENR JOIN CategoryProperty ON CategoryProperty.CategoryId = Category.CategoryId
   INNER JOIN Property         ON Property.PropertyId = CategoryProperty.PropertyId
   INNER JOIN ProductProperty  ON ProductProperty.PropertyId = Property.PropertyId
                                  AND ProductProperty.ProductId = Product.ProductId
WHERE
   Product.ProductId = 1

您提供的WHERE条件越多(结合使用,例如使用AND),查询的速度就越快.如果您已正确索引表,那就是.

实际上,该解决方案对于全文索引情况并不理想.另一个表以更加非规范化的方式存储与ProductId关联的所有文本可以在这里提供帮助.此表需要通过侦听ProductProperty表中的更改的触发器进行更新.



2> Bill the Liz..:

如果应用程序的用户必须先选择一个类别才能搜索,我会按类别将您的产品分成不同的数据库表.这种解决方案也表明,类别本身的共同点很少.按类别细分它也会使每次搜索更快,因为当你的用户正在寻找宠物时,不会浪费时间搜索汽车.

将产品拆分为类别后,应使用每个类别中产品的公共属性轻松创建表.应用程序的用户界面应该是动态的(我正在考虑Web表单),因为用户可以选择的属性应该在用户选择类别时更改.

请注意,如果您要将产品列在多个类别中,则此解决方案将导致表格中出现重复数据.在设计数据库时,需要在速度和标准化之间进行权衡.如果您没有适合多个类别的产品,那么我认为这将是最快的解决方案(就搜索速度而言).

推荐阅读
linjiabin43
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有