我正在sql数据库上建立一个相当大的数据集(目录((我估计大约有100k条记录(,以存储有关产品的信息。每种产品的特征是大约20-30个性质,所以这基本上意味着20-30个柱。系统的设置使得这些属性中的每一个实际上都链接到一个代码,因此每个产品都由一个连接所有这些属性的唯一字符串来表征(字符串必须是唯一的,如果两个产品代码相同,那么这两个产品实际上是同一个产品(。我想弄清楚的是,在sql方面,将目录存储为20-30列的表是否有任何区别,或者我最好只包含一列代码并从代码中解码属性。不同的是,在一种情况下,我会做
SELECT * FROM Catalogue WHERE Color='RED'
与
SELECT * FROM Catalogue WHERE Code LIKE '____R____________'
此外,这可能会让检查产品是否已经存在变得更容易,因为我只比较了一列与20-30列。我也可以在完整的表中添加一个额外的列来存储代码,并在执行一个操作时使用一个方法,在执行另一个操作中使用另一个方法。
我几乎不知道SQL引擎是如何工作的,所以我可能完全不了解这里的推理。
code
方法似乎很愚蠢。为什么我要这样说?
您有几十个具有属性的列,并且您知道它们是什么。为什么不在数据模型中包含这些信息呢。
我也很高兴你将如何区分这些比较:
WHERE Code LIKE '____R____________'
WHERE Code LIKE '___R_____________'
WHERE Code LIKE '_____R___________'
WHERE Code LIKE '____R___________'
这似乎是一个将你未来一半的时间花在调试上的食谱——如果不是你的代码,那就是别人的。
而且,使用单独的列,可以为常用的组合创建索引。
如果不是所有的行都有所有的属性,或者如果这些属性将来可以扩展,那么您可能需要一个为每个属性都有一行的结构:
entityId code value
1 Color Red
这被称为实体属性值(EAV(模型,在某些情况下是合适的。