編集1:テーブルとそれらの関係の名前を変更して、質問を解決しようとしました。EDIT2:3つのDBテーブルに保持しているデータの種類を見ないでください。それらはその場で構成されました。それらは私の現実世界のシナリオではありません(そして、いいえ、私は私の現実世界のデータについて話すことができません..実際、それは現在1人の親と6人の子供です)。データの種類を無視して、いくつかのデータが必要であるという事実を確認してください。EDIT3:2つのFKは0または1対1の関係です。0から多くではありません。1対1ではありません。0または1対1の関係と1対1の関係を避けようとしているので、外部結合は必要ありませんが、内部結合が必要です。
質問:提案されたデータベース設計が良い/悪い/ラメなどであるかどうかを知る必要があります。
問題:今日、インデックス付きビューを作成しようとしましたが、テーブルに外部結合があるために失敗しました。はぁ。だから私はこれを次のデザインのように修正できるかどうか疑問に思っていました:
- 3つのテーブル。
- table_Userはtable_AddressにFKを持っています
- table_Userはtable_VehicleにFKを持っています
- 等..
テーブルBとC(現在はルックアップテーブルのように機能します)があります。
- Id INT IDENTITY PK
- 説明NVARCHAR(100)NULLABLE
null許容型に気づきましたか?このように、table_Userの何かがtable_Addressに存在しません...フィールドはnullです(内部結合のため)。
以前、LEFT OUTER JOINを作成したので、table_bにデータがない場合は、各フィールドの結果がnullになります。
ここにいくつかのデータ例を投げます...
Table_User
- ID:1、名前:フレッド、アドレスID:1(NULL)
- ID:2、名前:ジョー、住所ID:2(1スミスストリート.....)
- ID:3、名前:ジェーン、住所ID:2(1スミスストリート.....)
Table_Address
- ID:1、説明= NULL
- ID:2、説明=1スミスストリート
等
それで、私はついにこれをすべてインデックス付きビューに入れることができます。(私の実際のシナリオには約8つのテーブルがあります)。
注:DBはMicrosoft Sql Server 2008ですが、これはどのDBにも当てはまります。
Q1:そのデザインは大丈夫ですか?
Q2:では、ここで行っているのは、データを正規化することですよね?内部結合を一緒に保つことによって。
Q3:最後に、これで問題がない場合は、一意の制約、キー、インデックスなどを使用して、テーブル内のデータ(住所など)が一意であることを確認することもできますか(わかりません)。適切な用語の)。
達人に感謝します!