Varchar2与构建数据仓库时的日期

时间:2011-07-19 08:52:18

标签: oracle data-warehouse

在Oracle中构建数据仓库时,更喜欢varchar2 over date数据类型是否有任何区别。我的数据仓库不是完全仓库,因为日期维度不是必需的(不需要日期层次结构),并且足以将日期保存为普通的'MM-DD-YYYY'格式化字符串。不过要使用哪种数据类型?

3 个答案:

答案 0 :(得分:10)

让我们做一点成本/效益分析,不管吗?

将“日期”字段保留为VARCHAR2

优点:

  • 在报表上格式化日期时的计算成本为零(只要它始终以MM-DD-YYYY格式显示)。

缺点:

  • 无法编入索引(嗯,按时间顺序意义上说)
  • 由于TO_DATE调用
  • ,搜索计算量增加
  • 如果某个报告上的日期必须以不同的格式显示,则需要额外的计算(例如:TO_CHAR(TO_DATE(date_column, 'MM-DD-YYYY'), 'DD-MON-YYYY')
  • 该列不要求所有值都遵循特定的日期格式,如果需要TO_DATE,则会增加失败的风险。

将“日期”字段更改为DATE

优点:

  • 可以在没有TO_DATE
  • 开销的情况下进行搜索
  • 可以编入索引
  • 无法插入“错误”值(虽然从业务角度来看日期可能仍然没有意义)
  • 可以轻松格式化

缺点:

  • 我无法想到任何一件事。

希望从技术的角度来看,这将有助于您的特定决定。始终存在业务(或办公室政治)视角:

  

日期维度不是必需的

我会为你解决这个问题:

  

日期维度不是必需 尚未

假设您将列保留为VARCHAR2并且客户端出现并要求过滤此日期字段上的某些报告。假设这是在杀死数据库服务器,您最终需要将其转换为DATE。在贵公司的生产环境中进行此更改是否相对容易?是否有足够的繁文缛节和表格以及更换控制板,你必须努力做出简单的改变?如果您设法克服这些障碍,您确定所有日期都以相同的格式存储吗?

答案 1 :(得分:2)

“足够”在这里意味着什么?我可以通过不使用DATE看到你输了什么,但你获得了什么使得这值得考虑?当然,如果您持有日期值,在某些时候您会想要使用它,例如“2011年3月的销售”还是其他什么?

答案 2 :(得分:2)

应该避免使用varchar2,因为它占用空间,为什么使用占用空间的数据类型比不使用空间的数据类型多呢?

现在磁盘存储空间可能不是问题,但它可以节省一些RAM空间,防止磁盘I / O,尤其是在经常访问包含这些日期的记录时。

如果在检索记录时需要磁盘I / O,它会稍微快一点,因为使用date vs varchar2时大小会更小。