【问题标题】:Setting up indexes for multiple foreign keys为多个外键设置索引
【发布时间】: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);

enter image description here

【问题讨论】:

  • 外键约束引用键,但您的表没有键。您的表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


【解决方案1】:

对于每个表,哪一列(或列组合)唯一标识每一行?然后,在每个 CREATE TABLE 中包含另一行 PRIMARY KEY(...)

对于每个表,如果没有特定的列集来唯一定义每一行,则添加

id INT UNSIGNED NOT NULL AUTO_INCREMENT,
PRIMARY KEY(id)

环顾四周;有很多很多的例子。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-09-16
    • 1970-01-01
    • 1970-01-01
    • 2021-07-05
    • 1970-01-01
    相关资源
    最近更新 更多