0

CLI を使用してテーブル定義とデータ フィクスチャをロードする順序を指定できるかどうか疑問に思っていました。私の問題は、2 つのテーブルがあり、それぞれが他方を指す外部キー制約を持っているため、レコードが追加された後に制約の 1 つを追加する必要があることです。または、これを行うためのより良い方法があるかもしれません...私はデータベースの専門家ではなく、今日は頭がぼやけています。

スキーマ:

CREATE TABLE clients (
  id INT AUTO_INCREMENT,
  name VARCHAR(255), address VARCHAR(255), 
  primary_contact_user_id INT  # References a user record in the users table
  ...
);

CREATE TABLE users (
  id INT AUTO_INCREMENT,
  username VARCHAR(255),
  client_id INT  # References a client record in the clients table
  ...
);

ALTER TABLE clients 
  ADD CONSTRAINT clients_primary_contact_user_id_users_id 
    FOREIGN KEY (primary_contact_user_id) REFERENCES users(id);

ALTER TABLE users 
  ADD CONSTRAINT users_client_id_clients_id 
    FOREIGN KEY (client_id) REFERENCES clients(id);
4

2 に答える 2

1

私もDBの専門家ではありませんが、彼らと一緒に仕事をすることに多くの時間を費やしています。循環参照は実際には正しくないと思います。

DB理論がそれを認可するかどうかに関係なく、別のテーブルへの結合によって1つのフィールドを取得できるため、これは不要な循環参照です。1つを削除し、この変更を反映するようにクエリを変更することをお勧めします。

推測に基づいてprimary_contact_user_id、単一のアイテムが「プライマリ」として選出される可能性のある多対多の関係のように聞こえるので、削除することをお勧めします...

このデザインが必要だと感じたら、その理由を教えてください。

于 2009-10-19T20:30:23.033 に答える
0

INSERTステートメントをCREATETABLEステートメントとALTERTABLEステートメントの間に配置します。

于 2009-10-19T20:31:19.147 に答える