ホームページ >データベース >mysql チュートリアル >データベースのリレーションシップには、サブタイプを使用する必要がありますか? それとも識別子列を含む単一のテーブルを使用する必要がありますか?
データベース テーブルの関係のためのサブタイプの設計
データベース スキーマを設計するとき、重要な考慮事項の 1 つは、サブタイプを使用するかどうかを決定することです。オブジェクト指向プログラミングのコンテキストでは、サブタイプは、スーパータイプまたは親クラスからプロパティとメソッドを継承する派生クラスです。データベースでは、この概念はテーブルのリレーションシップに適用できます。
指定されたシナリオでは、データベースには 3 つの主要なテーブルがあります: BOOKS、ARTICLES、および 注意事項。各書籍や記事には複数のメモを含めることができ、元の設計では、書籍のメモと記事のメモを区別するために、note_type と呼ばれる識別列を持つ単一の NOTES テーブルを提案していました。ただし、このアプローチではデータの整合性の問題と冗長性が生じる可能性があります。
質問で提案されている代替アプローチは、5 つを使用することです。表:
これこの設計により、書籍と記事のメモが個別のテーブルに分割され、識別列が不要になります。このアプローチではデータの整合性が保証されますが、NOTES テーブルが書籍と記事の両方で複製されるため、重複も発生します。
別のアプローチを検討してください。スーパータイプ テーブルでスーパータイプ/サブタイプの設計を使用するというものです。 PUBLICATION と呼ばれる、BOOKS のサブタイプ テーブル記事。このシナリオでは、PUBLICATION テーブルには書籍と記事の両方に共通の列が含まれ、サブタイプ テーブルには各タイプに固有の列が含まれます。
PUBLICATION {
以上がデータベースのリレーションシップには、サブタイプを使用する必要がありますか? それとも識別子列を含む単一のテーブルを使用する必要がありますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。