我是一个小型开发团队的开发人员,有些事情让我很生气,直到我决定采取行动......
Oracle不支持Bit数据类型 - 或者实际上在真/假场景中显而易见的任何其他内容.然而,在我加入团队之前,我的祖先决定使用char(1)字段,使用特定的字母来表示是/真.不幸的是,我们的应用程序已经被世界各地的人们所熟悉,并且由于坦率地无视我理解的所有尝试的原因,所使用的价值因本地化而异.
是的,我知道对于后端用户从未见过的值来说完全没有必要 - 但是...
我注意到,这种做法似乎越来越结转到新的发展,这令我疯狂 - 所以我想这不是提议号码(1,0)的 - 0被认为是假/没有,什么都被interpretted为真/是......
简单的问题 - 任何人都可以想到这可能是一个坏主意的原因吗?
虽然我们是关于它的,有谁知道为什么Oracle不支持简单的布尔类型?这不是一个明智的省略吗?
期待干杯,
马丁.
Sam*_*uel 27
使用CHAR(1)和约束只允许'1'和'0'.
...
col CHAR(1),
CONSTRAINT cons_atable_col1 CHECK (col1 IN ('1','0'))
Run Code Online (Sandbox Code Playgroud)
Álv*_*lez 16
我不是英国人,所以我倾向于使用1和0或'1'和'0'.如果你不是用英语编码,那么使用'Y'和'N'是没有意义的(是的,确实存在母语编码).使用'SI'和'NO'或'S'和'N'看起来并不专业(就像用重音字母命名变量一样).相反,如果您使用C,PHP或JavaScript进行编码,那么它们就是非常标准的.无论如何,我总是添加适当的约束来禁止任何其他角色.除了主观问题之外,我认为在选择CHAR或NUMBER时不会有明显的性能提升.我更喜欢数字,因为我不需要引用它们:)
我同意这是一个明显的遗漏,但我在一些Oracle论坛上读过关于这个主题的热烈讨论; 这是一种宗教问题.一些人声称布尔值属于应用程序数据类型,并且在数据库核心中没有位置.老实说,我相信这是我们在没有它的情况下如此长久的一个,我们最好说它是在目的上的东西.
顺便说一句,MySQL有一个BOOLEAN类型,但它是TINYINT(1)的同义词,所以它最终等于1和0; 这很好,因为它还有常量TRUE和FALSE,评估为1和0.
Jen*_*der 11
我更喜欢char(1)而不是数字(1),因为通过一些合理的字符选择,很明显哪个字符具有哪个布尔含义.
当然,您应该对抗所有不同的变量,选择一个并通过对列进行检查约束来确保它的使用.
虽然在您的情况下可能要迟到,但从其他工具生成模式通常至少会考虑一致性问题.我个人更喜欢hibernate用于此目的,但这是特定情况.
当然,这是一个明显的遗憾.更糟糕的是,PL/SQL有一个布尔值,但你不能在SQL语句中使用它.
以下是Ask Tom关于该主题的讨论.提供以Oracle为中心的问题视图.
至于存储,char(1)实际上有点(没有双关语意)更有效:
SQL> CREATE TABLE xx (c CHAR(1), n NUMBER);
Table created
SQL> insert into xx values('T', 1);
1 row inserted
SQL> select dump(c), dump(n) from xx;
DUMP(C) DUMP(N)
------------------- -------------
Typ=96 Len=1: 84 Typ=2 Len=2: 193,2
Run Code Online (Sandbox Code Playgroud)
根据这个 Oracle 指南 - 您应该使用 NUMBER(3)。疯狂,但真实。
http://docs.oracle.com/cd/B19306_01/gateways.102/b14270/apa.htm
| 归档时间: |
|
| 查看次数: |
42285 次 |
| 最近记录: |