假设我有 n 个属性(键值对),它们可以是日期、数字或字符串。哪种数据模型存储它们最有效?
这是我想到的一个解决方案:
表格的每一行data
必须能够链接到多种类型的n 个属性。
这种解决方案的优点是,如果我想添加一个新类型,我只需要添加两个新表(label_xy
和value_xy
),而不是修改现有表的结构。但这种解决方案真的是最方便的吗?
你会怎么做呢?
谢谢:)
假设我有 n 个属性(键值对),它们可以是日期、数字或字符串。哪种数据模型存储它们最有效?
这是我想到的一个解决方案:
表格的每一行data
必须能够链接到多种类型的n 个属性。
这种解决方案的优点是,如果我想添加一个新类型,我只需要添加两个新表(label_xy
和value_xy
),而不是修改现有表的结构。但这种解决方案真的是最方便的吗?
你会怎么做呢?
谢谢:)
我已经使用了所有场景:
从这些解决方案中:1.加入地狱,2.如果您的数据主要是字符串,那就很好了,3.虽然有点过度消耗空间是迄今为止最好和最有效的。
至于3。我必须解释一下,表格是这样的:
EntityID int,
TypeID int,
LabelID int,
ValueInt int,
ValueDecimal decimal(12,4),
ValueString nvarchar(max),
ValueDate datetime
(虽然LabelID
定义TypeID
了我将两者都用于无连接使用目的。)
这实际上取决于数据的性质。如果您有数百万个值并且需要强类型,那么这可能是一种方法。但是,正如您所提到的,每种新数据类型都需要新表。
如果实际上你只有几千个名称值对,并且数据的范围是相当规则的,即数字是整数,日期是 10 个字符,字符串少于 200 个字符,你可以在一个表中定义所有这些,即:
id int,
name varchar(50),
type int,
value varchar(200)
index(name)
id 不是必需的,但设计得很好。
命名约定由您决定,如有必要,可以应用唯一约束。
类型可以是 1=int, 2=date, 3=string(其他可以很容易地在以后添加)
该值可以根据您的最大字符串定义。
该解决方案有利于简单而不是性能,但这将由要求决定,字符串数据类型将是您的通配符,将其定义为“文本”可能更有意义。