デスクトップコンピュータ、ラップトップ、スイッチ、ルーター、携帯電話などのITハードウェアを格納するインベントリデータベースを構築しています。すべてのデバイスが単一のテーブルに格納されているスーパータイプ/サブタイプパターンと特定の情報を使用しています。サブタイプのテーブルに入れられます。私のジレンマは、次の2つのデザインから選択しています。
上の図では、すべてのデバイスが共通のサブタイプを共有しています。たとえば、デスクトップコンピューターとラップトップは、次のテーブルのレコードを持ちます:デバイス、ネットワークデバイス。スイッチには、デバイス、ネットワークデバイスのレコードがあります。ルーターは、Device、NetworkDevice、WANDeviceにレコードを持っています。位置情報を追跡するデバイスには、位置情報の記録があります。このセットアップについて私が考えたいくつかの長所と短所:
- 長所:HostnameやLocationIDなどの共通フィールドに基づいてレコードを選択する方が簡単です。
- プロ:nullフィールドはありません。
- 欠点:特定のデバイスのCRUD操作に含める必要があるテーブルは明確ではなく、将来のDBAを混乱させる可能性があります。
下の図では、すべてのデバイスに独自のサブタイプがあります(ここには表示されていないデバイスのクラスがさらにあります)。この状況では、どのテーブルレコードが挿入または選択されるかは明らかです。デスクトップコンピューターとラップトップはコンピューターなどに行きます。このセットアップについて私が考えたいくつかの長所と短所:
- メリット:サブタイプのCRUD操作に使用するテーブルはすぐにわかります。
- メリット:CRUD操作には1つのテーブルのみを使用する必要があります。
- 欠点:共通のサブタイプフィールドに基づいてレコードをSELECTするには、すべてのテーブルを組み合わせる必要があります。たとえば、HostnameやLocationIDによる検索などです。
どちらの状況でも、ClassDiscriminatorフィールドは、CHECK制約で使用できるようにサブタイプテーブルに配置され、挿入できるタイプを制御します。
設計が優れている推奨事項はありますか、それとも完全に意見の問題であり、データベースの意図した目的に依存していますか?
編集:私が持っている特定の質問は、「NetworkDevice」テーブルの重複する性質についてです。このテーブルは、コンピュータ、スイッチ、ルーターなど、ホスト名やIPアドレスを持つデバイスのネットワーク情報を保持するためのものです。このテーブルの重複する性質は問題を引き起こす可能性があるものですか、それともこの方法で実装しても問題ありませんか?
提供された入力について、事前にありがとうございます。追加情報が必要かどうか尋ねてください。