web-dev-qa-db-ja.com

ブール列を追加します。手つかずの追跡と偽の追跡

[バックストーリー]現在のウィジェットインベントリの簡単なデータベースがあります。 5つまたは6つのテーブル全体で平均してわずか12列ですが、すでに膨大な数のレコードがあります。

キャップが付いているウィジェットもあれば、付いていないウィジェットもありますが、実際に追跡したことはありません。現在、管理者は、個々のウィジェットがキャップ付きで到着するかどうかをユーザーが追跡できるようにしたいと考えています。現在の在庫を確認するための在庫管理は行いませんが、「到着上限」の新しい列を追加すると、今日までに受信したすべてのデータがありません。このようなシナリオに対する通常のベストプラクティスアプローチは何ですか?

文字列列を追加する場合、「」の意味は明らかです。データが入力されていません。しかし、私はブール値を追加しているので、既存のレコードはデフォルトで何かを示す値になります:FALSE。

私が最初に考えたのは、ユーザーポータルに、チェックボックスではなく、この質問のラジオボタンペアを持たせることでした。新しいレコードを作成するとき、またはfalse-falseで古いレコードに戻るときに、[はい]または[いいえ]をクリックすると、その値が記録されます。plus別のブール値は、この質問が実際に手動で回答されたことを示します。あれは;最初のブール値がFで、2番目のブール値がTの場合、最初のブール値は「デフォルトのfalse」ではありません。

彼らの手振りの解決策は、今日より前の日付のレコードを「不明」として表示することでした(既存のレコードにユーザーが確認したfalseの値を手動で与えることができなかったため、これは修正されました)。 faux-bool intを使用して、それをtrinaryで考える必要がありますか?または、別のトラッキングビット/ブールを使用することに戻り、その種のデータ用に新しいテーブルを作成する必要がありますか?これは一般的な概念ですか?命名規則はありますか?

1
Joel Reid

ほとんどのDBMS、または少なくとも私が扱ったものでは、Boolは実際には3値です。 1、0、NULLがあります。 NULLは、「まだデー​​タを入力していない」ために特にあります。コーディング方法に応じて、チェックボックスはデフォルトで0またはNULLのチェックが外されている必要があります。それからもちろんチェックのために1。ただし、レポートでは、誰かがそれを見て値(1または0)を入力した行と、まだ誰も更新していない行(値がNULLの行)を実際に区別できます。

5
Kenneth Fisher

Coddがnullマーカーを形式化したとき、彼はそれがMISSINGおよびINAPPLICABLEデータを処理する方法であると書きました。ここにあるのは、MISSINGの明確なケースです。

ケネスが正しく指摘しているように、これは実際には3つの述語システムではなく、実際には値がわからない可能性がある2つの述語システムです。 nullは値自体ではなく、実際の値が利用できないことを示すマーカーです。

ただし、ユーザーインターフェイスには、「はい」、「いいえ」、「わからない」の3つの状態を表示する必要があります。

2