为什么BOOLEAN类型列在关系数据库设计中存在问题?

paf*_* k. 13 mysql sql oracle derby

在过去的几年里,我一直主要使用Oracle,并且习惯于将单字符varchar列用作布尔值.

我也可以看到(每个堆栈溢出答案),MySQL的建议类型是TINYINT.

现在我接受了我的小方案项目 - 使用DerbyDB,它支持BOOLEAN列,但直到10版左右才开始.

所以,问题是,为什么在设计关系数据库时合并BOOLEAN列如此困难?我是否遗漏了某些内容,或者它只是将待办事项列表推到了不重要的位置,因为您可以同时使用其他列类型?

Bry*_*ton 13

就Derby而言,具体而言,答案有点奇怪:开源数据库Derby曾经被称为Cloudscape,并且是一种专有产品.那时,它完全支持BOOLEAN.

随后,Cloudscape被IBM收购的Informix收购,IBM工程师决定使Derby与DB2兼容.原因在于,如果两个数据库兼容,则用户可以更轻松地在Derby数据库和DB2数据库之间迁移其应用程序.但是,工程人员没有从Derby中删除非DB2兼容的功能,他们只是在SQL语法中禁用它们,而大多数实现都已就绪.

随后,IBM向Apache Software Foundation开源Cloudscape,将其命名为Derby.开源社区不再受Derby与DB2完全兼容的要求的约束,决定恢复BOOLEAN数据类型支持.因此Derby现在具有BOOLEAN数据类型支持.


DCo*_*kie 7

Tom Kyte几乎回应了这篇博客文章中的最后一句话:

"它不是我们所拥有的类型 - 我可以说不多也不少.ANSI没有它 - 许多数据库没有它(我们当然不是唯一的).在宏伟的计划中 - 我会说这种情况非常"低"(这是我的意见)."

他是从Oracle的角度讲的,但它适用于任何关系型RDBMS.

  • 对我来说,这意味着:"我们不会对开发人员说些什么,因为他们无论如何都无法切换产品" (2认同)