我有一个数据库表Products
,产品可以有数百个功能和属性(灵活的唯一属性数)。用户可以使用每个属性来过滤产品。如何将所有这些细节存储在数据库中?
目前,我将每个属性存储在ProductProperties
表中的产品的不同行中。这使我的数据库变得庞大。对于具有200个属性的1000个产品,这会在ProductProperty
表中生成200,000行。
我计划的另一个解决方案是将ProductProperty
保存为varchar
列中的JSON,但这缺乏灵活性,我无法使用T-SQL查询过滤行。
这种情况有更好的方法吗?
答案 0 :(得分:3)
这取决于您要如何搜索功能。
传统的方法是拥有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是另一种可能性。但是,联结表是我会考虑的第一种方法。
答案 1 :(得分:-1)
您是否在文本文件中包含了属性信息?如果是,那么你有两种可能性: 1-是通过代码(即Java代码)将文本结构化并自动填充到数据库中,您可以在互联网上找到很多这些代码! 2-是做那个manulaay,这是更困难的选择。 遗憾的是,这两个选项都需要手动填充,但我发现建立一个适合我的Text结构的算法更容易!