首页 > 解决方案 > 不同表上同名的列可以有不同的数据类型吗?

问题描述

我正在寻找一些指导。纵观我们的一个数据库,我们有所有名称相同的列,比如说X。现在列出现在X同一个数据库的多个表中。但是,在 10 列中,数字 / varchar 数据类型几乎是均匀的。

我想知道这是否可以,或者我应该尝试提出一些事情来改变这种情况?据我所知,现实世界的数据都是数字的。

非常感谢您提前提供任何帮助。

标签: sqldatabaseoracledatabase-design

解决方案


这实际上取决于列X是十个不同表上的相同业​​务属性,还是具有相同列名的不同属性。

我想知道这是否可以...

如果这些列代表不同的业务属性,那么它们共享相同的名称是令人讨厌的,但可能造成的损害不足以证明重命名它们是合理的。这取决于真实姓名(假设它不是真的X)。

如果每一列代表相同的业务属性,那么它们具有不同的数据类型肯定是不行的。可能发生的最好情况是连接效率低下,因为 Oracle 必须将字符列转换为数字值。在最坏的情况下,您已经打开了数据损坏的门户,并且您应该只包含数值的列现在包含非数字值,这些值无法转换并且会导致查询失败。历史的教训是,这种数据损坏最终会发生。

……或者我应该尝试提出一些事情来改变这种情况

在一个理想的世界里,你应该改变这一点。当然,在理想的世界中,您不必:-)

实际情况是,拥有一致的物理数据模型总是一件好事,但您可能很难让人们相信这样做的价值。

至少需要付出很多努力,因为您不能简单地通过 ALTER TABLE ... MODIFY 来更改填充列的数据类型。您需要添加一个新列,移植数据,删除旧列,重命名新列并重新应用任何约束、索引等。然后是使用相关表的应用程序的回归测试。

那是幸福的道路:如果您发现数据损坏并且这些列中有非数字数据,会发生什么?现在它变得非常混乱。


推荐阅读