0

下の図のように、双方向の関係を持つ 2 つのテーブルを作成する必要があります。 ここに画像の説明を入力 しかし、それは常にエラーを出します。テーブルの作成に次のクエリを使用しています。

CREATE TABLE IF NOT EXISTS `rpt_operation` (
  `op_id` int(45) NOT NULL,
  `component` int(45) NOT NULL,
  `ideal_time` time NOT NULL,
  `handling_time` time NOT NULL,
  PRIMARY KEY (`op_id`),

  INDEX (component),
  FOREIGN KEY (component)
  REFERENCES rpt_component(comp_id)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;



CREATE TABLE IF NOT EXISTS `rpt_component` (
  `comp_id` int(45) NOT NULL,
  `lot_code` int(60) NOT NULL,
  `lot_color` varchar(60) NOT NULL,
  `drawing_num` int(60) NOT NULL,
  `revision_num` int(60) NOT NULL,
  `operation` int(45) NOT NULL,
  PRIMARY KEY (`comp_id`),

  INDEX (operation),
  FOREIGN KEY (operation)
  REFERENCES rpt_operation(op_id)

) ENGINE=InnoDB DEFAULT CHARSET=latin1;

component int(45) NOT NULLrpt_operation テーブルの行にエラーが表示されます。どんな助けでも大歓迎です。前もって感謝します

4

2 に答える 2

4

あなたのテーブル構造は不可能です。rpt_operation外部キーの にレコードがないため、 にレコードを挿入できません。また、rpt_component外部キーの にレコードがないため、 にcomponentレコードを挿入できません。rpt_componentrpt_operationoperation

これらのフィールドの 1 つまたは両方を null 可能にすると、テーブル構造は依然として再帰的であるため、外部キーの 1 つを手動で追加する必要があります。次に例を示します。

ALTER TABLE rpt_operation
  ADD CONSTRAINT
  FOREIGN KEY (component)
  REFERENCES rpt_component(comp_id);
于 2012-09-12T11:26:28.120 に答える
0

この問題を解決するには、リンク テーブルを使用することをお勧めします。これは実行可能なソリューションではなく、回避策が必要です。

于 2012-09-12T11:46:44.097 に答える