共享相同外键的两个或多个表可以共享该外键的约束吗?

Abi*_*ala 3 oracle foreign-key-relationship

这段代码有什么问题??它给出错误“名称已被另一个约束使用”。另外,如果我无法在不同的表中定义相同的约束,那么有什么方法可以重用以前定义的约束?

有什么见解吗??

CREATE TABLE tbl_formats
(
  format_id NUMBER(5),
  format_name VARCHAR2(50),
  format_desc VARCHAR2(100),
  valid_from DATE,
  valid_to DATE,
  format_type VARCHAR2(50),
  CONSTRAINT pk_format_id PRIMARY KEY(format_id)
);


CREATE TABLE tbl_format_detail
(
  id NUMBER(10),
  format_id NUMBER(5),
  src_field VARCHAR2(200),
  target_field VARCHAR2(100),
  business_rule VARCHAR2(4000),
  expression VARCHAR2(4000),
  target_segment VARCHAR2(4),

  CONSTRAINT pk_id PRIMARY KEY(id),
  CONSTRAINT fk_format_id FOREIGN KEY(format_id) REFERENCES tbl_formats(format_id)
);

CREATE TABLE tbl_client_formats 
(
  client_format_id NUMBER(10),
  format_id NUMBER(5),
  client_id NUMBER(5),
  CONSTRAINT pk_client_format_id PRIMARY KEY(client_format_id),
  CONSTRAINT fk_format_id FOREIGN KEY(format_id) REFERENCES tbl_formats(format_id),
  CONSTRAINT fk_client_id FOREIGN KEY(client_id) REFERENCES tbl_clients(client_id)
);
Run Code Online (Sandbox Code Playgroud)

表“tbl_client_formats”中定义的外键约束“fk_format_id”似乎与表“tbl_format_detail”中已定义的相同约束冲突。我是 Oracle 的新手,所以请解释一下即使是显而易见的事情。

Fra*_*itt 5

问题是您尝试两次使用相同的约束名称。只需为第二个约束使用不同的名称(例如fk_client_formats_format_id),就可以了。

一般来说,我建议使用表名作为约束名称的一部分,以避免名称冲突(如果约束名称太长,则必须使用某种缩写方案)。