ブール値をビットデータ型としてSQLに格納しない理由はありますか?私はそれらをしばしば制約なしに0と1に制限するための整数として、T/F、True/False、Yes/Noなどのような文字列として保存しています。それをビットとして保存し、追加の制約について心配する必要はありませんか?私はここで何が欠けていますか?ブール値をビットデータ型としてSQLに格納しない理由はありますか?
答えて
私はいつもこれを保存するために私ができる最小のデータ型にこだわると思います。
- のSQLServer:BIT
- オラクル:NUMBER(1)(またはPL/SQLでBOOLEAN)
- のMySQL:OracleのBOOLEAN:TINYINT
編集(IIRC BOOLEANマップこの自動的に) PL/SQLのみであり、表定義ではありません。これを反映するように更新されました。一般的に道を何が起こるか
1つの理由は、人がビットについて知らないことや、y/nが書式設定の方が簡単だと考えていることです。 他の理由は時々あなたは考える:おそらく多分これはブールフィールド以上のものになるだろう。あなたはそれをちょうどintにします。
あなたは何が不足していない:)
私はいつもビットデータ型を使用しています。 SQLではNULLにすることができます。しかし、あなたのプログラムを実行するときは、bool(例えばC#で)が値型であることを考慮する必要があります。この型はNULLにすることはできません。 System.DBNull値と比較する必要があります。
Nullable
SQLでNOT NULLにする.........テーブルblaを作成する(回答ビットがNULLでない) – SQLMenace
問題はADO.NETがサポートしているものか、その他のデータアクセスフレームワークです。 Nullableが許可されている場合
私たちは常にデータをビットとして保存しますが、それは小さく、さらに重要なことに、これはそのために設計されています。
エンドユーザーがデータを直接操作する時間があり、Yes/NoまたはY/Nの方が読みやすくなりました。この場合、わかりやすいデータ表示を反映したビューを作成しました。私は彼らがしばしば 0と1に値を制限するために、制約なし整数 として保存、およびT/Fのようなもの 、真/偽、はい/いいえ、などと文字列として、 再びなしで見
私の最初のプロジェクトを入れ直した後の私の最後の2つの仕事は、彼らは私を元に戻し、「0」を「N」に、1を「T」に変更しました。 「私は決して覚えがたい」「私は0 =偽はコンピューティング101だと思ったが、わからないのはかなり一般的だ。それとも、それは私が働く良い場所を選んでいないサインだ。 – dwidel
制約。 ビットとして保存するのではなく、 を追加してください。 という制約がありますか?
はい!
私はここで何が欠けていますか?
実際には、「私はここで何が欠けていないのですか?答えはコモンセンスです。
BITは、BOOLEAN値を格納するために通常使用されるデータ型です。 BITが1の場合はtrue、0の場合はfalseです。それは簡単です。
私は3番目の正規化フォームは、TrueとFalseの値を格納しているテーブルを持っていて、それを参照する必要があると述べています。あなたもあなたの日付でそれを行うことを確認してください!
しかし3NFには完全に従っていますか? ;)
Third Normal Formの定義に別のソースを見つけることができます。すべての列のすべての値もテーブルのどこかに格納しなければならないということは何もありません。 –
私はビットをたくさん使います。しかし、時には私はfalseを返す能力を持つことができる、あるいは真の(エラーメッセージのような)多くの価値を持ちたいと思っています。したがって、ブール値の代わりにintを使用すると、次のようなことができます。
0 =偽 1 =パスワードが間違っています 2 =ユーザー名が存在しません。 3 =アカウントがロックアウトされました。 4 =アカウントが無効です。
など。そうしない
それはブール値ではありません。それはコード値です。定義によるブール値は真または偽であり、真の複数の定義はありません。 –
私が言ったように、私はビットをたくさん使います。私は代わりの解決策を提示しました。私の投稿を読むと、私は時にはブール値の代わりにintを使うと言っていました。 –
いくつかの理由は、次のとおりです。
わけではありませんすべてのデータベースは、ビットデータ型を持っているあなたは、あなたがすることはできませんインデックスビットフィールド一部のデータベースではdifferntバックエンドを使用できるようにint型の代わりに使用しますので。
あなたの持っているものは本当に真偽ではありません。他の可能性はありません。例えば、あなたは開いた状態や閉じた状態などの状態を表すビットフィールドを持っているかもしれません。しかし、後で、あなたはステータスとしてキャンセルする必要があることもわかります。
ステータスが3つ以上ある場合は、列挙型を使用します。
- 1. DyanmoDbはブール値trueの代わりに値1を格納しています
- 2. ブール値を格納する
- 3. circular_bufferにブール値を格納しないのはなぜですか?
- 4. Lambda + Nodejs + dynamodb:jsonを格納する理由:データ型を格納するアイテムを置くのはなぜですか?
- 5. TypeScript - マップ値としてクラスを格納していますか?
- 6. フォーム処理のために隠しフィールドにブール値を格納する
- 7. SQLに複数の値を格納する方法はありますか?
- 8. SQL Serverのビットデータ型をVarCharに変換します。
- 9. 文字列に格納されたJson値をクラス値に割り当ててからSQLに格納する
- 10. Luaで簡単な値をアンパックしない理由はありますか
- 11. C#で列挙型がint型として格納されていますか?
- 12. ブール式を格納するためのデータ構造はありますか?
- 13. varbinary型を使用してSQL Serverデータベースにイメージを格納できますか?
- 14. VB.Net BinaryWriterを使用してファイルからビットデータを格納/取得することは可能ですか?
- 15. 結果セットをSQL Serverデータベースに格納していますか?
- 16. ポインタインデックスに値を格納しますか?
- 17. Oracle SQLの列にブール型がありますか?
- 18. 型キャストなしでlong値でdouble値を格納できますか?
- 19. 現在の日付をレコードにDay型としてのみ格納する方法はありますか?
- 20. 値と単位をSQLに格納
- 21. JSONPを使用しない理由はありますか?
- 22. OrientDBを使用しない理由はありますか?
- 23. "var"を放棄しない理由はありますか?
- 24. ワイルドカードを使用しない理由はありますか?
- 25. Boost :: shared_ptrsを使用しない理由はありますか?
- 26. メタプログラミングを使用してメソッドの戻り値の型を変更する理由はありますか?
- 27. Javaメソッドは値のコピーを格納していますか?
- 28. SqlDataReader SQL Server 2008からビットデータ型を読み取っていますか?
- 29. pyyamlのブール値の自由な処理を無効にする方法はありますか?
- 30. tellp()、tellg()の戻り値の型を収集して格納する方法は?
Re。 「最小データ型」:SQL ServerのBIT値は実際には1ビット幅ではなく、1バイト幅の倍数です。ただし、同じテーブル内の複数のBITが同じストレージに格納されます。 – Tomalak
MySQLはBITタイプもサポートしており、そのストレージ要件はTomalak氏の説明とまったく同じです。 –
@Chad:MySQL BITカラムは、SQLServer BITカラムとはまったく異なります。 SQLServerのBITフィールドには1つの値が格納され、複数のBITフィールドが格納されている場合にはBITフィールドが結合されます。 MySQL BITフィールドは、(宣言に基づいて)1〜64ビットのビットマスクです。 – Powerlord