(Oracle)一对一和插入查询

时间:2016-04-10 11:30:45

标签: mysql database oracle relational-database

我正在尝试将数据插入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数据转换为其中一个结构?如果我尝试它告诉我它缺少一个父键,这是真的,但我不知道如何创建而不需要在创建过程中使用相同的键。

1 个答案:

答案 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? ..它不能同时;)虽然我的解决方案应该适用于两者