私は学生ですが、今は自分で解決できない問題があります(インターネットで検索した後)。
自分のやっていることを学びたいので、「宿題」はしませんが、例を使用します。
次の図があります。
そして次のように:
従業員(ID
、DepartamentID、Floor)
外部キー(DepartamentID
、Floor
)はDepartament(DepartamentID、Floor)を参照します
Departament(DepartamentID
、Floor
、アテンダント)
外部キーアテンダントは従業員(ID)を参照します
したがって、このガイドラインを使用すると、私の実際のSQLコードは次のようになります。
CREATE TABLE Employee(
ID varchar(25) not null,
DepartamentID varchar(25),
Floor varchar(25),
CONSTRAINT pk_ID PRIMARY KEY (ID),
) ENGINE=InnoDB;
CREATE TABLE Departament(
DepartamentID varchar(25) not null,
Floor varchar(25) not null,
Attendant varchar(25) not null,
CONSTRAINT pk_dept PRIMARY KEY (DepartamentID, Floor),
CONSTRAINT fk_att FOREIGN KEY (Attendant) REFERENCES Employee (ID),
) ENGINE=InnoDB;
ALTER TABLE Employee
ADD CONSTRAINT fk_dept FOREIGN KEY (DepartamentID, Floor) REFERENCES Departament (DepartamentID, Floor);
このようにして、与えられた情報が言うように、私が達成しなければならないことを達成すると思いますbut次のようなデータを挿入しようとすると:
INSERT INTO Employee (ID, DepartamentID,Floor) VALUES ('123456789-Z', 'IT', 'roof');
または
INSERT INTO Departament (DepartamentID, Floor, Attendant) VALUES ('IT', 'roof', '123456789-Z');
次のメッセージが表示されます。
検索して検索したところ、別のテーブルからのデータが必要なテーブルにデータを挿入することはできず、別のテーブルが空であることに気付きました。
挿入の前にalter tableを実行できると思っていましたが、先生はcreate.sqlファイルとinserts.sqlファイルを別々に必要としているため、この方法では実行できません。
私はこれを達成するための解決策を見つける必要があり、stackexchangeは私の最後の希望です。
これを読んでくださった皆さん、ありがとうございました。
PD:質問が長すぎる場合は申し訳ありませんが、私はできる限り最善を尽くして説明しましたが(英語は母国語ではありません)、もう一度説明する必要がある場合は、説明します!
タスクが理解できたかどうかはわかりませんが、ここに代替スキーマを検討するための食べ物をいくつか示します。
CREATE TABLE Departament(
DepartamentID varchar(25) not null,
Floor varchar(25) not null,
CONSTRAINT pk_dept PRIMARY KEY (DepartamentID, Floor),
) ENGINE=InnoDB;
CREATE TABLE Employee(
ID varchar(25) not null,
DepartamentID varchar(25),
Floor varchar(25),
CONSTRAINT pk_ID PRIMARY KEY (ID),
CONSTRAINT fk_dept FOREIGN KEY (DepartamentID, Floor)
REFERENCES Departament (DepartamentID, Floor)
) ENGINE=InnoDB;
CREATE TABLE Attendant (
ID varchar(25) not null,
DepartamentID varchar(25) not null,
Floor varchar(25) not null,
CONSTRAINT pk_attendent PRIMARY KEY (ID),
CONSTRAINT ak_attendent UNIQUE (DepartamentID, Floor),
CONSTRAINT fk_... REFERENCES Employee ...,
CONSTRAINT fk_... REFERENCES Department ...,
) ENGINE=InnoDB;