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