1

複数の外部キー関係を持つ一連のテーブルを作成しようとしています。2 つのテーブルのうち最初のテーブルには 2 列の主キーがあり、1 つは当社が指定し、もう 1 つは製造元が指定します。3 番目のクエリを試行すると、エラーが発生します。ここで何がうまくいかないのかよくわからないので、どんな助けも心から感謝します。

SQL

CREATE TABLE rugs (
    id INTEGER NOT NULL AUTO_INCREMENT,
    manufacturer_id INTEGER NOT NULL,
    name VARCHAR(255),
    description TEXT,
    PRIMARY KEY (id, manufacturer_id)
);

CREATE TABLE carpets (
    id INTEGER NOT NULL AUTO_INCREMENT,
    manufacturer_id INTEGER NOT NULL,
    name VARCHAR(255),
    warranty TEXT,
    description TEXT,
    fiber_name VARCHAR(255),
    brand_name VARCHAR(255),
    texture_name VARCHAR(255),
    PRIMARY KEY (id, manufacturer_id)
);

CREATE TABLE carpet_styles (
    id INTEGER NOT NULL AUTO_INCREMENT,
    carpet_id INTEGER,
    style_name VARCHAR(255),
    PRIMARY KEY (id),
    FOREIGN KEY (carpet_id) REFERENCES carpets (manufacturer_id)
);

CREATE TABLE carpet_colors (
    id INTEGER NOT NULL AUTO_INCREMENT,
    carpet_id INTEGER,
    color_name VARCHAR(255),
    color_category VARCHAR(255),
    PRIMARY KEY (id),
    FOREIGN KEY (carpet_id) REFERENCES carpets (manufacturer_id)
);

CREATE TABLE carpet_custom_names (
    id INTEGER NOT NULL AUTO_INCREMENT,
    carpet_id INTEGER,
    custom_name VARCHAR(255),
    PRIMARY KEY (id),
    FOREIGN KEY (carpet_id) REFERENCES carpets (manufacturer_id)
);

CREATE TABLE rug_styles (
    id INTEGER NOT NULL AUTO_INCREMENT,
    rug_id INTEGER,
    style_name VARCHAR(255),
    PRIMARY KEY (id),
    FOREIGN KEY (rug_id) REFERENCES rugs (manufacturer_id)
);

CREATE TABLE rug_colors (
    id INTEGER NOT NULL AUTO_INCREMENT,
    rug_id INTEGER,
    color_name VARCHAR(255),
    color_category VARCHAR(255),
    PRIMARY KEY (id),
    FOREIGN KEY (rug_id) REFERENCES rugs (manufacturer_id)
);

CREATE TABLE rug_shapes (
    id INTEGER NOT NULL AUTO_INCREMENT,
    rug_id INTEGER,
    shape_name VARCHAR(255),
    shape_category VARCHAR(255),
    PRIMARY KEY (id),
    FOREIGN KEY (rug_id) REFERENCES rugs (manufacturer_id)
);

CREATE TABLE catalog_contents (
    id INTEGER NOT NULL AUTO_INCREMENT,
    catalog_id INTEGER,
    carpet_id INTEGER,
    rug_id INTEGER,
    PRIMARY KEY (id),
    FOREIGN KEY (rug_id) REFERENCES rugs (id),
    FOREIGN KEY (carpet_id) REFERENCES carpets (id),
    FOREIGN KEY (catalog_id) REFERENCES catalogs (id)
);
4

1 に答える 1

2

これは、複合キーの一部であるにもかかわらずcarpets.manufacturer_id、独自のインデックスを持たないことが原因のようです。コンポジットとは別にインデックスを作成する必要がありますPRIMARY KEY。同じことが当てはまりますrugs.manufacturer_id

CREATE TABLE rugs (
    id INTEGER NOT NULL AUTO_INCREMENT,
    manufacturer_id INTEGER NOT NULL,
    name VARCHAR(255),
    description TEXT,
    /* manufacturer_id gets its own index */
    PRIMARY KEY (id, manufacturer_id),
    INDEX idx_rugs_manufacturer_id (manufacturer_id)
);


CREATE TABLE carpets (
    id INTEGER NOT NULL AUTO_INCREMENT,
    manufacturer_id INTEGER NOT NULL,
    name VARCHAR(255),
    warranty TEXT,
    description TEXT,
    fiber_name VARCHAR(255),
    brand_name VARCHAR(255),
    texture_name VARCHAR(255),
    PRIMARY KEY (id, manufacturer_id),
    /* manufacturer_id gets its own index */
    INDEX idx_manufacturer_id (manufacturer_id)
);
于 2012-07-03T19:21:32.613 に答える