4

假设我有 n 个属性(键值对),它们可以是日期、数字或字符串。哪种数据模型存储它们最有效?

这是我想到的一个解决方案:

数据模型

表格的每一行data必须能够链接到多种类型的n 个属性。

这种解决方案的优点是,如果我想添加一个新类型,我只需要添加两个新表(label_xyvalue_xy),而不是修改现有表的结构。但这种解决方案真的是最方便的吗?

你会怎么做呢?

谢谢:)

4

2 回答 2

4

我已经使用了所有场景:

  1. 您描述的那个(自己表中的每种数据类型)
  2. 来自 Anthony 的答案 - 仅值字符串按需转换为其他数据类型
  3. 一张表,多列具有不同的数据类型,其中每条记录仅使用一个(其余为稀疏列)

从这些解决方案中:1.加入地狱,2.如果您的数据主要是字符串,那就很好了,3.虽然有点过度消耗空间是迄今为止最好和最有效的。

至于3。我必须解释一下,表格是这样的:

EntityID int,
TypeID int,
LabelID int,
ValueInt int,
ValueDecimal decimal(12,4),
ValueString nvarchar(max),
ValueDate datetime

(虽然LabelID定义TypeID了我将两者都用于无连接使用目的。)

于 2012-08-22T13:33:50.447 回答
2

这实际上取决于数据的性质。如果您有数百万个值并且需要强类型,那么这可能是一种方法。但是,正如您所提到的,每种新数据类型都需要新表。

如果实际上你只有几千个名称值对,并且数据的范围是相当规则的,即数字是整数,日期是 10 个字符,字符串少于 200 个字符,你可以在一个表中定义所有这些,即:

id int,
name varchar(50),
type int,
value varchar(200)
index(name)

id 不是必需的,但设计得很好。
命名约定由您决定,如有必要,可以应用唯一约束。
类型可以是 1=int, 2=date, 3=string(其他可以很容易地在以后添加)
该值可以根据您的最大字符串定义。

该解决方案有利于简单而不是性能,但这将由要求决定,字符串数据类型将是您的通配符,将其定义为“文本”可能更有意义。

于 2012-08-22T13:28:54.407 回答