我正在尝试将数据插入2个表格。
CREATE TABLE tableA
(
primaryKeyA INT PRIMARY KEY,
foreignKeyB INT
);
CREATE TABLE tableB
(
primaryKeyB INT PRIMARY KEY,
foreignKeyA INT
)
ALTER TABLE tableA
CONSTRAINT fk_tableA
FOREIGN KEY (foreignKeyB) REFERENCES tableB (primaryKeyB);
ALTER TABLE tableB
CONSTRAINT fk_tableB
FOREIGN KEY (foreignKeyA) REFERENCES tableA (primaryKeyA);
我如何将INSERT
数据转换为其中一个结构?如果我尝试它告诉我它缺少一个父键,这是真的,但我不知道如何创建而不需要在创建过程中使用相同的键。
答案 0 :(得分:0)
你在这里有多对多的关系..你应该有一个中间表来帮助解决这个问题。
例如:(抱歉,语法未经过测试,目前无法访问数据库)
CREATE TABLE tableA
(
primaryKeyA INT PRIMARY KEY
);
CREATE TABLE tableB
(
primaryKeyB INT PRIMARY KEY
);
CREATE TABLE tableAB
(
primaryKeyA INT ,
primaryKeyB INT
);
ALTER TABLE tableAB
ADD CONSTRAINT pk_tableAB
PRIMARY KEY (primaryKeyA, primaryKeyB);
ALTER TABLE tableAB
CONSTRAINT fk_tableAB_B
FOREIGN KEY (primaryKeyB) REFERENCES tableB (primaryKeyB);
ALTER TABLE tableAB
CONSTRAINT fk_tableAB_A
FOREIGN KEY (primaryKeyA) REFERENCES tableA (primaryKeyA);
基本上,如果您将表A视为“客户”而将表B视为“地址”(对于一个简单示例), 你有这样的情况:
客户可以拥有多个地址(即住宅,邮寄等) 地址可以属于许多客户(即同一住宅中的多个人)。
这是一个多对多的关系,正如其他人提到的,如果你为此创建FK,你最终得到一个“圆圈”,你不能插入任何东西。 所以你需要“打破”链接。您可以使用中间表来描述关系。
希望这有帮助。
**另外,是MySQL吗?还是Oracle? ..它不能同时;)虽然我的解决方案应该适用于两者