Зависи от степента, до която размерът на редовете в разделената таблица е причината за необходимостта от дялове.
Ако размерът на реда е малък и причината за разделянето е самият брой от редове, тогава не съм сигурен какво трябва да направите.
Ако размерът на реда е доста голям, обмислили ли сте следното:
Нека P е разделената таблица и F да бъде таблицата, посочена в бъдещия външен ключ. Създайте нова таблица X :
CREATE TABLE `X` (
`P_id` INT UNSIGNED NOT NULL,
-- I'm assuming an INT is adequate, but perhaps
-- you will actually require a BIGINT
`F_id` INT UNSIGNED NOT NULL,
PRIMARY KEY (`P_id`, `F_id`),
CONSTRAINT `Constr_X_P_fk`
FOREIGN KEY `P_fk` (`P_id`) REFERENCES `P`.`id`
ON DELETE CASCADE ON UPDATE RESTRICT,
CONSTRAINT `Constr_X_F_fk`
FOREIGN KEY `F_fk` (`F_id`) REFERENCES `F`.`id`
ON DELETE RESTRICT ON UPDATE RESTRICT
) ENGINE=INNODB CHARACTER SET ascii COLLATE ascii_general_ci
и най-важното, създайте съхранена процедура за добавяне на редове към таблица P . Вашата съхранена процедура трябва да гарантира (използване на транзакции), че всеки път, когато се добави ред към таблица P , съответен ред се добавя към таблица X . Не трябва да позволявате добавяне на редове към P по "нормалния" начин! Можете да гарантирате, че референтната цялост ще бъде запазена само ако продължите да използвате вашата съхранена процедура за добавяне на редове. Можете свободно да изтриете от P но по нормалния начин.
Идеята тук е, че вашата таблица X има достатъчно малки редове, така че да се надяваме, че няма нужда да го разделяте, въпреки че има много много редове. Въпреки това индексът в таблицата ще заеме доста голяма част от паметта, предполагам.
Трябва ли да поискате P на външния ключ, вие, разбира се, ще поискате X вместо това, тъй като там всъщност е външният ключ.