这段代码有什么问题? 它给出了另一个约束已经使用的错误"名称"。另外,如果我不能在不同的表中定义相同的约束,那么有什么方法可以重用先前定义的约束?
任何洞察力?
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)
);
看起来像是外键约束&fk_format_id'在表格中定义了“tbl_client_formats'与已经在表格中定义的相同约束发生冲突' tbl_format_detail'。 我是oracle的新手,所以请解释一下显而易见的事情。
答案 0 :(得分:3)
问题在于您尝试使用相同的约束名称两次。
只需为您的第二个约束使用不同的名称(例如fk_client_formats_format_id
),您应该没问题。
通常,我建议使用表名作为约束名称的一部分,以避免名称冲突(如果约束名称太长,则必须使用某种缩写方案)。
答案 1 :(得分:1)
外键存储在数据库范围内,而不是表范围中。在同一个数据库中不能有两个具有相同名称的FK,即使它们不在同一个表中。你可以这样命名你的FK:
FK_PARENT_CHILD_FIELD
例如:
FK_FORMATDETAILS_FORMATS_ID,
FK_CLIENTFORMATS_FORMATS_ID,
FK_CLIENTFORMATS_CLIENT_ID