sql >> データベース >  >> RDS >> Mysql

MySQL-条件付き外部キー制約

    Polymorphic Associationsと呼ばれるデザインを実行しようとしています。 。つまり、外部キーは、いくつかの関連するテーブルのいずれかの行を参照できます。

    ただし、外部キー制約は正確に1つのテーブルを参照する必要があります。 Commentsの別の列の値に応じて、異なるテーブルを参照する外部キーを宣言することはできません。 テーブル。これは、リレーショナルデータベース設計のいくつかのルールに違反します。

    より良い解決策は、コメントによって参照される一種の「スーパーテーブル」を作成することです。

    CREATE TABLE Commentable (
      id SERIAL PRIMARY KEY
    );
    
    CREATE TABLE Comments (
      comment_id SERIAL PRIMARY KEY,
      foreign_id INT NOT NULL,
      ...
      FOREIGN KEY (foreign_id) REFERENCES Commentable(id)
    );
    

    各コンテンツタイプは、このスーパーテーブルのサブタイプと見なされます。これは、インターフェースのオブジェクト指向の概念に類似しています。 。

    CREATE TABLE BlogPosts (
      blogpost_id INT PRIMARY KEY, -- notice this is not auto-generated
      ...
      FOREIGN KEY (blogpost_id) REFERENCES Commentable(id)
    );
    
    CREATE TABLE UserPictures (
      userpicture_id INT PRIMARY KEY, -- notice this is not auto-generated
      ...
      FOREIGN KEY (userpicture_id) REFERENCES Commentable(id)
    );
    

    BlogPostsに行を挿入する前に またはUserPicturesCommentableに新しい行を挿入する必要があります 新しい疑似キーIDを生成します。次に、その生成されたIDを使用して、コンテンツをそれぞれのサブタイプテーブルに挿入できます。

    これらすべてを実行すると、参照整合性の制約に依存できます。



    1. SQL Server Management Studio(SSMS)で上位X行を編集して上位X行を選択するための値を変更する方法-SQL Server/TSQLチュートリアルパート20

    2. SQLite Strftime()関数の有効なフォーマット文字列置換

    3. PostgreSQL:psqlコマンドラインユーティリティを使用する場合のWindowsでのエンコーディングの問題

    4. T-SQLのピボットデータ