oracle数据布尔,Oracle中的布尔字段
我發現這個鏈接有用。
這里是強調每種方法的一些優點/缺點的段落。
最常見的devise是模仿Oracle數據字典視圖使用的許多類似布爾的標志,select“Y”為true,“N”為false。 但是,要正確地與主機環境(如JDBC,OCCI和其他編程環境)進行交互,最好select0代表false,1代表true,這樣可以正確使用getBoolean和setBoolean函數。
基本上他們主張方法2,為了效率的緣故,使用
值為 0/1(因為與JDBC的getBoolean()等)具有檢查約束
一種CHAR(因為它使用的空間less于NUMBER)。
他們的例子:
create table tbool (bool char check (bool in (0,1)); insert into tbool values(0); insert into tbool values(1);`
Oracle本身使用Y / N作為布爾值。 為了完整性,應該注意的是,pl / sql有一個布爾types,只有表沒有。
如果您正在使用該字段來指示是否需要處理logging,則可以考慮使用Y和NULL作為值。 這使得占用很小空間的非常小的(快速讀取)索引。
要使用最less量的空間,您應該使用一個約束為“Y”或“N”的CHAR字段。 Oracle不支持BOOLEAN,BIT或TINYINT數據types,所以CHAR的一個字節盡可能小。
最好的select是0和1(作為數字 – 另一個答案build議0和1作為空間效率的CHAR ,但這有點扭曲對我來說),使用NOT NULL和檢查約束限制內容到這些值。 (如果你需要列可以為空,那么它不是一個你正在處理的布爾值,而是一個具有三個值的枚舉…)
0/1的優點:
語言獨立。 如果每個人都使用它,那么'Y'和'N'會很好。 但他們沒有。 在法國,他們使用“O”和“N”(我親眼看到了這一點)。 我沒有在芬蘭編程,看他們是否在那里使用“E”和“K” – 毫無疑問他們比這更聰明,但是你不能確定。
與廣泛使用的編程語言(C,C ++,Perl,Javascript)的實踐相一致,
和應用層一起玩,比如Hibernate
例如,導致更簡潔的SQL,以找出有多less香蕉準備吃香蕉的select sum(is_ripe) from bananas而不是select count(*) from bananas where is_ripe = 'Y'或者甚至是(yuk) select sum(case is_ripe when 'Y' then 1 else 0) from bananas
'Y'/'N'的優點:
占用空間比0/1less
這是甲骨文build議的,也許是一些人更習慣的
另一張海報提出“Y”/ null為performance收益。 如果你已經certificate你需要的性能,那么公平,但否則避免,因為它使查詢不那么自然( some_column is null而不是some_column = 0 ),在一個左join你會混淆虛假與不存在的logging。
1/0或Y / N上帶有檢查約束。 以太方式很好。 我個人更喜歡1/0,因為我在perl中做了很多工作,并且它使得在數據庫字段上執行perl布爾操作變得非常簡單。
如果你想和ORACLE的頭把手一起真正深入地討論這個問題,那么請查看Tom Kyte對此的評論。
我做了大部分工作的數據庫都使用了'Y'/'N'作為布爾值。 有了這個實現,你可以得到一些技巧,如:
計數是真的行:
SELECT SUM(BOOLEAN_FLAG ='Y'then 1 ELSE 0時的情況)從X開始
在對行進行分組時,強制執行“如果一行是真的,那么都是真的”邏輯:
從MAX中selectMAX(BOOLEAN_FLAG)
相反,如果一行為假,則使用MIN強制分組。
通過向Oracle數據庫中的現有表添加“布爾”列(使用numbertypes)來實現接受的答案的工作示例:
ALTER TABLE my_table_name ADD ( my_new_boolean_column number(1) DEFAULT 0 NOT NULL CONSTRAINT my_new_boolean_column CHECK (my_new_boolean_column in (1,0)) );
這會在my_table_name創build一個名為my_new_boolean_column的新列,默認值為0.該列不接受NULL值,并將接受的值限制為0或1 。
在我們的數據庫中,我們使用一個枚舉來確保我們傳遞TRUE或FALSE。 如果你這樣做,前兩種方法中的任何一種,如果不經過適當的devise就開始給整數增加新的含義,或者結束于具有Y,y,N,n,T,t, F和f值,并且必須記住哪個代碼段使用哪個表以及它正在使用的是哪個版本。
總結
以上是生活随笔為你收集整理的oracle数据布尔,Oracle中的布尔字段的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Python+bs4实现爬取小说并下载到
- 下一篇: CSI笔记【10】:阵列信号处理及MAT