我正在寻找一些指导。查看我们的数据库之一,我们发现所有的列都被命名为相同的列,例如X
。现在,列X
出现在同一数据库的多个表中。但是,在10列中,数字/ varchar数据类型几乎是均匀划分的。
我想知道这是否可以,还是我应该尝试提出一些建议来对此进行更改?从我可以看到的现实数据都是数字。
非常感谢您提前提供帮助。
答案 0 :(得分:3)
这实际上取决于列X
是十个不同表上的相同业务属性,还是具有相同列名的不同属性。
我想知道是不是...
如果这些列代表不同的业务属性,那么它们共享相同的名称是很可恶的,但是可能没有足够的破坏来证明重命名它们的合理性。它取决于真实姓名(假设它不是真的X
)。
如果每个列表示相同的业务属性,则对于它们具有不同的数据类型绝对是不可行的。可能发生的最好情况是您的连接效率低下,因为Oracle必须将字符列转换为数字值。在最坏的情况下,您已经打开了破坏数据的门户,现在只应包含数字值的列现在包含非数字值,这些数字不能转换,并且会导致查询失败。历史的教训是这种数据损坏最终会发生。
...或者我应该尝试提出一些改变的东西
在理想世界中,您应该更改此设置。当然,在理想的世界中,您不必:-)
实用性是,拥有一致的物理数据模型总是一件好事,但是您可能很难说服人们这样做的价值。
至少需要付出很多努力,因为您不能简单地通过ALTER TABLE…MODIFY来更改已填充列的数据类型。您需要添加一个新列,将数据跨接,删除旧列,重命名新列,然后重新应用任何约束,索引等。然后是使用所涉及表的应用程序的回归测试。
那是一条快乐的路:如果发现数据损坏已发生并且这些列中包含非数字数据,会发生什么?现在变得非常混乱。
答案 1 :(得分:0)
从我的角度来看,X
可以,但是我更喜欢将它们命名为X_THIS
和X_THAT
,因为-尽管最佳实践表示您应该始终当查询看起来像
select a.x, b.x, c.x
from emp a join dept b on a.deptno = b.deptno
join job c on c.job = a.job
很难(一见钟情)发生了什么。但是,如果有
select a.x_emp, b.x_dept, c.x_job
from emp a join dept b on a.deptno = b.deptno
join job c on c.job = a.job
然后,由于不必为列名创建别名,因此您的生活会更轻松。