3

10 列のテーブル (X) があり、そのうち 6 列は null 許容の外部キー (bigint データ型) であり、各行で 5 列が NULL になります。

解決策: テーブル (X) を (X) と (XType) の 2 つのテーブルに分割し、(X) に 6 つのうちの 1 つを挿入するための big int 列 (外部キーではない)IDと、 6 つのXType_idデータの型を決定するための列が含まれるようにします。

このソリューションは最適ですか、それとも 10 列の最初のテーブルの方が優れていますか?

4

2 に答える 2

3

私はあなたの最初の選択肢を好みます。

これらの 6 つの個別の外部キー列がある場合、これら 6 つの参照テーブルに実際の外部キー制約を設定することで、参照整合性を適用できます。

単一の とを使用した非常にスマートなアプローチを使用している場合、参照整合性を強制することはできなくなります。IDID_Type

参照整合性を真に強制できることの利点は、列が 1 つしかないことの「利点」をはるかに上回ります。値を持ついくつかの列を持つことは悪くありませんIDNULL

于 2012-12-16T08:21:02.103 に答える
0

Marc_s の答えは絶対に正しいです。もう 1 つちょっとだけ追加させてください。2 番目のアプローチでは、スペースを節約することはできません (ひいては、キャッシングを改善することはできません)。MS SQL Server はフィールドの「NULL 性」をビット フィールドにエンコードし、6 つの NULL 可能な列を 1 バイトで表すことができます。2番目のアプローチの「タイプ」フィールドは、1バイト未満にはなりません。

ところで、FK がさまざまな型の場合、2 番目のアプローチでは、FK 値を「最小公分母」型 (おそらく文字列) として格納し、型変換を手動で行う必要があるため、ドメインの整合性も失われます。

于 2012-12-16T15:39:30.510 に答える