Mysql
 sql >> база данни >  >> RDS >> Mysql

Разделяне на mySQL таблици, които имат външни ключове?

Зависи от степента, до която размерът на редовете в разделената таблица е причината за необходимостта от дялове.

Ако размерът на реда е малък и причината за разделянето е самият брой от редове, тогава не съм сигурен какво трябва да направите.

Ако размерът на реда е доста голям, обмислили ли сте следното:

Нека 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 вместо това, тъй като там всъщност е външният ключ.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. nodeJS връща стойност от обратното извикване

  2. SQL заявка, за да получите всички продукти, категории и мета данни woocommerce/wordpress

  3. Вмъкване на стойности на масива в MYSQL

  4. Мигриране от MySQL към PostgreSQL – какво трябва да знаете

  5. Как да вмъкнете фрагмент от php код в mysql база данни