DB中的变量数据类型

时间:2014-08-31 22:23:14

标签: mysql sql django

我正在寻找一种在我的数据库中拥有变量列的方法(可能是mysql),我知道这是不可能的,但我需要的是一种模拟这种行为的方法。

我有一对简单的表格,如:

#task table
(
id int ..., 
date timestamp, 
owner int
) 

#info table
(
id int ..., 
relative int, #points to Task 
name varchar, 
value VARIANT
)

基本上我需要将可变数量的信息字段与每个任务相关联,并且每个information.value都是不同的类型(字符串,日期时间,布尔和整数)。

我计划创建每种类型的四列,而不是单个VARIANT,并填充正确的一列。但是这个表会增长很多(600Mb /月),我认为这将是一个巨大的浪费空间。

有人知道更好的方法吗?

我不知道这是否会让这更糟或更好但我会在django中做到这一点!

1 个答案:

答案 0 :(得分:0)

您正在实施一种称为实体 - 属性 - 值(EAV)模型的东西。你已经很好地描述了它,以防你不知道它是什么。

就数据结构而言,字符串类型在具有NULL值时占用的空间很小。但是其他类型占据空间,所以你会浪费空间。您可以将所有内容存储为字符串 - 数字作为数字,日期作为YYYY-MM-DD,并使用单个字符串。但是,您确实失去了本机数据类型的一些灵活性。

通常,EAV模型的计算成本很高。每月600 MB是一个可观的数据量。通过数GB的数据将记录重新组合在一起可能会让MySQL感到痛苦(group by的性能很差)。我通常推荐一种混合型EAV模型,其中有一个常规的"记录存储常用属性和EAV片段仅用于不常见的属性。