回答:
私が見つかりました。このリンクは便利。
ここでは、各アプローチの長所/短所のいくつかを強調した段落です。
最も一般的に見られる設計は、Oracleのデータディクショナリビューが使用する多くのブールのようなフラグを模倣することであり、trueの場合は「Y」、falseの場合は「N」を選択します。ただし、JDBC、OCCI、その他のプログラミング環境などのホスト環境と正しく対話するには、falseに0、trueに1を選択して、getBoolean関数とsetBoolean関数で正しく機能するようにすることをお勧めします。
基本的に、彼らは効率のために、方法2を推奨します。
getBoolean()
などとの相互運用性のため)とチェック制約彼らの例:
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にはブール型があることに注意してください。これはそうではないテーブルだけです。
フィールドを使用してレコードを処理する必要があるかどうかを示す場合は、値としてYおよびNULLを使用することを検討してください。これにより、スペースをほとんどとらない非常に小さな(高速な)インデックスが作成されます。
最良のオプションは0と1(数値として-別の答えはスペース効率のためにCHARとして0と1を示唆していますが、私にとっては少しひねりすぎています)、NOT NULLとチェック制約を使用して内容をこれらの値に制限します。(列をnullにできるようにする必要がある場合、それは処理しているブール値ではなく、3つの値を持つ列挙体です...)
0/1の利点:
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」の利点:
別のポスターは、パフォーマンス向上のために「Y」/ nullを提案しました。あなたがしている場合証明あなたは、パフォーマンス、公正十分が必要ですが、それはあまり自然(照会ますので、それ以外の場合は避けることsome_column is null
の代わりにsome_column = 0
)、左にあなたが存在しないレコードを持つ真偽conflateます参加。
チェック制約が設定された1/0またはY / Nのいずれか。エーテルウェイで結構です。個人的にはperlで多くの作業を行うため、私は1/0を好みます。これにより、データベースフィールドに対してperlブール演算を非常に簡単に実行できます。
あなたはオラクルヘッドhonchosの一つで、この質問の実際の深さでの議論をしたい場合は、トム・カイトはこれについて言っているかを確認してくださいここで
ほとんどの作業を行ったデータベースでは、ブール値として「Y」/「N」を使用しました。この実装により、次のようなトリックを実行できます。
trueの行をカウント:
SELECT SUM(CASE WHEN BOOLEAN_FLAG = 'Y' THEN 1 ELSE 0)FROM X
行をグループ化する場合、「1つの行がtrueの場合、すべてがtrueである」というロジックを
適用し
ます。
oracleデータベース(number
type を使用)の既存のテーブルに「ブール」列を追加して、承認された回答を実装する実用的な例:
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))
);
これにより、デフォルト値0 でmy_table_name
呼び出された新しい列が作成されmy_new_boolean_column
ます。列はNULL
値を受け入れず、受け入れられる値を0
またはに制限します1
。
wall
データ型があり、ブール値を使用するときに頭をぶつけられるようにしたいです。