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