0

外部キーを持つテーブルを作成したい。

これは、このテーブルのスキームです。

CREATE TABLE `SupplierOrderGoods` (
    `shopOrder_id` INT(11) NOT NULL,
    `supplierGood_id` INT(11) NOT NULL,
    `count` INT(11) NOT NULL,
    PRIMARY KEY (`shopOrder_id`, `supplierGood_id`),
    CONSTRAINT `FK_SupplierOrderGoods_ShopOrders` FOREIGN KEY (`shopOrder_id`) REFERENCES `shoporders` (`id`),
    CONSTRAINT `FK_SupplierOrderGoods_SupplierGoods` FOREIGN KEY (`supplierGood_id`) REFERENCES `suppliergoods` (`id`)
)
COLLATE='utf8_general_ci'
ENGINE=InnoDB;

SupplierGoodsこれには、 to table —FK_SupplierOrderGoods_SupplierGoodsと to table ShopOrders—の 2 つのリンクがありますFK_SupplierOrderGoods_ShopOrders。このコードを HeidiSQL または phpMyAdmin で実行すると、奇妙なインデックスFK_SupplierOrderGoods_SupplierGoodsが作成されます。

私のスキームでは指定していませんが、作成中です。HeidiSQLでこれを見たとき、私はそれに気づきました:

画像

また、heidi でテーブルの作成コードが表示される可能性があります。

CREATE TABLE `SupplierOrderGoods` (
    `shopOrder_id` INT(11) NOT NULL,
    `supplierGood_id` INT(11) NOT NULL,
    `count` INT(11) NOT NULL,
    PRIMARY KEY (`shopOrder_id`, `supplierGood_id`),
    ------> INDEX `FK_SupplierOrderGoods_SupplierGoods` (`supplierGood_id`),
    CONSTRAINT `FK_SupplierOrderGoods_ShopOrders` FOREIGN KEY (`shopOrder_id`) REFERENCES `shoporders` (`id`),
    CONSTRAINT `FK_SupplierOrderGoods_SupplierGoods` FOREIGN KEY (`supplierGood_id`) REFERENCES `suppliergoods` (`id`)
)
COLLATE='utf8_general_ci'
ENGINE=InnoDB;

とは言いませんでしINDEXたが、ここにあります。怖い…どうして?:'(

なぜこのインデックスが表示されるのですか? ハイジが壊れていると思うので、phpmyadminで試してみましたが、同じ結果が得られました。

私はそれが正しいかどうか考えました...しかし、なぜ1つのフィールドだけに1つのインデックスしかないのですか? それが正しいなら、なぜ2つのインデックスではないのですか?

アップデート

わお!外部キーを持つすべてのテーブルにインデックスがあることに気付きました! 私はそれをグーグルで検索し、これを見つけまし。通常、そのインデックスはfkで作成されていますよね?

では、なぜ 1 つのインデックスのみが作成され、2 つのインデックスは作成されないのでしょうか?

4

0 に答える 0