カテゴリとトピックを2つの別々のテーブルで区別したいようですが、両方のIDを別のテーブルで参照するようにしますlikes
カテゴリまたはトピックのいずれかを好むユーザーを容易にするため。
できることは、サブタイプcategories
を持つスーパーエンティティテーブルを作成することです およびtopics
。自動インクリメントされたキーは、スーパーエンティティテーブルで生成され、2つのサブタイプテーブルの1つにのみ挿入されます(カテゴリかトピックかに基づいて)。
サブタイプテーブルは、1:1の関係で自動インクリメントされたフィールドを介してこのスーパーエンティティを参照します。
このようにして、スーパーエンティティテーブルをlikes
にリンクするだけです。 1つの列(カテゴリまたはトピックのいずれかを表すことができます)のみに基づくテーブルで、id
はありません サブタイプテーブルのは両方に存在します。
これをモデル化する方法の簡単な例を次に示します。
このモデルを使用すると、カテゴリとトピック間の関係を維持できますが、両方のエンティティをsuperentity
で一般化できます。 テーブル。
このモデルのもう1つの利点は、サブタイプテーブルの共通フィールドをスーパーエンティティテーブルに抽象化できることです。たとえば、categories
およびtopics
両方にtitle
フィールドが含まれていました およびurl
:これらのフィールドをsuperentity
に入れることができます それらはそのサブタイプの共通の属性であるため、テーブル。サブタイプテーブルに固有のフィールドのみをサブタイプテーブルに配置します。