【问题标题】:Items with many columns SQL Server具有多列 SQL Server 的项目
【发布时间】:2018-01-26 09:30:25
【问题描述】:

我有一个数据库表Products,一个产品可以有数百个特性和属性(灵活数量的唯一属性)。用户可以使用每个属性来过滤产品。如何将所有这些详细信息存储在数据库中?

目前,我将ProductProperties 表中产品的每个属性存储在不同的行中。这使我的数据库变得巨大。对于具有 200 个属性的 1000 个产品,这会在 ProductProperty 表中产生 200,000 行。

我计划的另一个解决方案是将 ProductProperty 保存为 JSON 在 varchar 列中,但这缺乏灵活性,我无法使用 T-SQL 查询过滤行。

对于这种情况有更好的方法吗?

【问题讨论】:

  • 最好将您的产品表分解为多个表,例如拥有一个 ProductType 表。然后将不同的“属性保存在不同的表中”。现在,当用户搜索数据时,他们只需加入查询中的表并以这种方式进行过滤,而无需使用大量表。也意味着您可以更加灵活。
  • 每个产品都有灵活的独特栏目,有的产品有100个特征,有的有300+。
  • 是的,我认为有人已经将此作为答案发布,但您会将这些数据拆分为功能表,因此它并非全部保存在一个表中,而是跨多个表进行管理。如果这有意义的话。

标签: sql sql-server database datatable


【解决方案1】:

这取决于您要如何搜索功能。

传统的方法是有一个ProductFeatures 表。每个产品和每个功能都有一列:

create table ProductFeatures (
    ProductFeatureId int identity(1, 1) primary key,
    ProductId int not null references Products(ProductId),
    FeatureId int not null references Features(FeaturId)
);

然后您可以使用此表单独过滤功能。

如果功能的数量是灵活的,这将特别方便。

在某些情况下,您可能希望将特征存储为文本列,并在其上构建全文索引。 JSON 是另一种可能性。但是,联结表是我会考虑的第一种方法。

【讨论】:

  • 它会使选择查询在大量行中搜索属性变慢吗?数字、日期列怎么样?
  • @YesudassMoses 。 . .我建议您再问一个问题,更详细地了解“功能”的含义。
【解决方案2】:

您的属性信息是否存在于文本文件中?如果是,那么您有两种可能性: 1-是通过代码(即Java代码)自动构造您的文本以区分并填充到您的数据库中,您可以在互联网上找到很多这些代码! 2- 是做那个 manulaay ,这是更困难的选择。 不幸的是,这两个选项都需要手动操作,但我发现构建适合我的文本结构的算法更容易!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-05-13
    • 2012-10-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-06-28
    相关资源
    最近更新 更多