私は自分の会社のビジネスアプリケーションの構築に取り組んでおり、特定の状況に最適なデータベース設計を選択するのに苦労しています。次のエンティティがあるとします。
承認
- Id
- 状態
- ...
ApprovalComment
- Id
- ApprovalId
- コメント
注文
- Id
- ...
請求書
- Id
- ...
明らかに、複数のタイプの承認と、承認を必要とする複数のオブジェクトが存在する可能性があります。テーブルを設計するための次のオプションのうち、最も適切なものは何ですか。
オプション1
null外部キーを持つ1つの承認テーブルがあります。
承認
- ID PK
- 状態
- OrderId FK NULL
- InvoiceId FK NULL
ApprovalComments
- ID PK
- ApprovalId FK
- コメント
この場合、承認が必要なすべてのオブジェクトに列を追加する必要があります
オプション2
共通のフィールドを持つ親の承認テーブルと、承認が必要な各オブジェクトの子テーブルを用意します。
承認
- ID PK
- 状態
ApprovalComments
- ID PK
- ApprovalId FK
- コメント
OrderApprovals
- ApprovalId PK FK
- OrderId FK
InvoiceApprovals
- ApprovalId PK FK
- InvoiceId FK
オプション3
各オブジェクトの承認テーブルがあります。
OrderApprovals
- ID PK
- OrderId FK
- 状態
OrderApprovalComments
- ID PK
- OrderApprovalId FK
- コメント
InvoiceApprovals
- ID PK
- InvoiceId FK
- 状態
InvoiceApprovalComments
- ID PK
- InvoiceApprovalId FK
- コメント
これらはすべて有効なソリューションであることはわかっていますが、将来、さまざまな種類の承認を追加するのに最適なソリューションを決定することはできません。何かご意見は?