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

外部キーにリンクされたテーブルをテストする方法は?

    コメントで述べたように、FK制約のあるテーブルを他のテーブルにドロップする必要があります。最初に、リンク先のテーブルをドロップできます。

    例:

    User
      id: 1
      name: Mike
    
    Address 
      id: 1
      user_id: 1 (FK constraint to User.id table.column)
      address_1: 555 Main Street
    

    この設定は1:1の関係です(データの正規化の詳細 )、1つのユーザー行が1つのアドレス行を参照でき、アドレス行はユーザー行の存在に依存しているため、ユーザー行を削除しようとすると、前述のエラーが表示されます。

    ただし、最初にAddressテーブルを削除すると、Userテーブルは他のテーブルに対してFKではないため、すべてが期待どおりに機能します。

    参照整合性 を確保する スキーマ内では、データ駆動型アプリケーション全体に浸透する孤立した行が発生しないようにします。

    次のコマンドを発行することもできます:

    SET foreign_key_checks = 0;
    # Do Stuff
    SET foreign_key_checks = 1;
    

    ただし、データの参照整合性が損なわれ、実際に混乱する可能性があるため、これには強くお勧めします。誰かがエンタープライズ環境でこれを行うのを見たことがあり、それをクリーンアップするのに数週間かかりました。ただし、これを厳密に実行している場合は、 テスト目的で;単体テストを書いたり、単に学習したりするのと同じように、毎回テーブルを削除したくない場合は、次のようにすることができます。

    # Because we remove the foreign key check, we can truncate in any order
    SET foreign_key_checks = 0;
    TRUNCATE TABLE user;
    TRUNCATE TABLE address;
    SET foreign_key_checks = 1;
    

    外部キー制約を使用した適切なスキーマ設計は、データ駆動型アプリケーションの優れた基盤を構築するのに役立ちます。いつ使用するか、外部キー制約を構築する方法について頭を悩ませるには時間がかかりますが、時間が経つにつれて理解し始めます。開始するための良い方法は、magento のようなオープンソースプロジェクトをダウンロードすることです。 、 wordpress 、または vbulletin そしてそれらのスキーマを見てください。 MySQLワークベンチ を使用してこれらのスキーマをイントロスペクトすることもできます。 実体関連図 を表示します (ERD)、テーブル間のリンクを視覚的に示します。




    1. パスに許可を与える

    2. WAMPでデータベースを復元する

    3. MySQL関数からテーブルを返す方法

    4. より効率的な階層システム