我应该为每种数据类型设置一列还是存储所有内容的 1 列

use*_*107 1 database-design eav

我有一个当前看起来像这样的数据库表:

PageField
-Id (Int, PK)
-FieldType (String) Can be Text, Decimal, Integer or Bit
-Value (This stores the value regardless of the FieldType, so it is not strongly typed)
Run Code Online (Sandbox Code Playgroud)

我是否应该删除Value列并将其替换为 4 个单独的列TextValueDecimalValueIntegerValueBitValue吗?

数据类型将设置为相关内容。这意味着在这 4 列的每一行中,第 3 列将是NULL.

Vér*_*ace 8

这个问题(以各种形式)经常出现。这种类型的“解决方案”被称为EAV(实体-属性-值),并不是一个好主意。看看这里在这里为它可能导致的问题,以及如何正确利用的数据类型,你的RDBMS提供各种提示(或链接的提示)。

不使用正确的数据类型肯定会混淆 查询优化器并降低系统速度。Joe Celko是世界著名的 SQL 专家,他的观点值得关注。

他使用首字母缩略词“MUCK”(*)来描述这个系统的事实应该告诉你所有你需要知道的:-)

(*) 大规模统一代码密钥