【问题标题】:Can two or more tables which share same foreign keys share a constraint on that foreign key?共享相同外键的两个或多个表可以共享对该外键的约束吗?
【发布时间】:2012-11-29 17:58:43
【问题描述】:

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

有什么见解吗??

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)
);

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

【问题讨论】:

    标签: oracle foreign-key-relationship


    【解决方案1】:

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

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

    【讨论】:

    • 感谢您的回答。我可以重用之前定义的约束,而不是用不同的名称定义相同的约束吗??
    • 每个约束都应该有其唯一的名称。在重用之前,您必须删除以前的名称。
    • 我最后的评论令人困惑,所以我删除了它。我明白了。谢谢
    【解决方案2】:

    外键存储在数据库范围内,而不是表范围内。您不能在同一个数据库上拥有两个同名的 FK,即使它们不在同一个表中。你可以这样命名你的 FK:

    FK_PARENT_CHILD_FIELD

    例如:

    FK_FORMATDETAILS_FORMATS_ID,

    FK_CLIENTFORMATS_FORMATS_ID,

    FK_CLIENTFORMATS_CLIENT_ID

    【讨论】:

    • 既然你说外键存储在数据库范围内,有没有办法重用之前定义的外键?
    • 没有因为 FK 约束特定于表列。
    猜你喜欢
    • 2020-06-16
    • 1970-01-01
    • 2017-02-10
    • 1970-01-01
    • 2012-11-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-16
    相关资源
    最近更新 更多