【发布时间】:2020-06-17 15:19:55
【问题描述】:
使用以下脚本添加外键时会显示有关索引的错误消息。我以不同的方式添加了主键和索引,但不确定图表是否提供了有关如何设置我没有看到的索引/主键的信息。
CREATE TABLE aocommercial_building(
parcel CHAR(25) NOT NULL,
suffix INT NOT NULL,
owner VARCHAR(255) NULL,
owner2 VARCHAR(255) NULL,
);
CREATE TABLE aocommercial_heatcool(
parcel CHAR(25) NOT NULL,
suffix INT NOT NULL,
section INT NULL,
heat_cool_cd VARCHAR(255) NULL
);
CREATE TABLE aocommercial_unit(
parcel CHAR(25) NOT NULL,
suffix INT NOT NULL,
section INT NOT NULL,
occ_desc VARCHAR(255) NULL
);
CREATE TABLE aocom_misc_bldg(
parcel CHAR(25) NOT NULL,
suffix INT NOT NULL,
section INT NOT NULL,
misc_bldg_type VARCHAR(255) NULL
);
ALTER TABLE aocommercial_unit ADD FOREIGN KEY (parcel) REFERENCES aocommercial_building(parcel);
ALTER TABLE aocommercial_unit ADD FOREIGN KEY (suffix) REFERENCES aocommercial_building(suffix);
ALTER TABLE aocommercial_heatcool ADD FOREIGN KEY (parcel) REFERENCES aocommercial_unit(parcel);
ALTER TABLE aocommercial_heatcool ADD FOREIGN KEY (suffix) REFERENCES aocommercial_unit(suffix);
ALTER TABLE aocommercial_heatcool ADD FOREIGN KEY (section) REFERENCES aocommercial_unit(section);
ALTER TABLE aocom_misc_bldg ADD FOREIGN KEY (parcel) REFERENCES aocommercial_unit(parcel);
ALTER TABLE aocom_misc_bldg ADD FOREIGN KEY (suffix) REFERENCES aocommercial_unit(suffix);
ALTER TABLE aocom_misc_bldg ADD FOREIGN KEY (section) REFERENCES aocommercial_unit(section);
【问题讨论】:
-
外键约束引用键,但您的表没有键。您的表
aocommercial_building不太可能同时是每个包裹一行(键 = 包裹)的包裹表和每个后缀一行(键 = 后缀)的后缀表。 也许它是一个包裹后缀表,每个包裹和后缀有一行,在这种情况下,您将在两列上创建一个主键并在外键中引用它们,例如ALTER TABLE aocommercial_unit ADD FOREIGN KEY (parcel, suffix) REFERENCES aocommercial_building(parcel, suffix); -
无关,但是:您几乎肯定不想使用
char(n)- 改用varchar(n) -
嗨,Thorsten,您提供的示例缩小了范围,我创建的主键不正确。谢谢。我不确定我作为“图像描述”发布的图表是否有帮助,但看起来你明白了
标签: sql indexing foreign-keys