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

Съставен индекс за таблица с връзки

Да кажем, че се придържаме към използването на id Auto Increment колона като първичен ключ. Сега ще трябва също да се уверим, че данните са последователни, т.е. , няма дублиращи се редове за комбинация от (student_id, course_id) стойности. Така че, ще трябва или да се справим с това в кода на приложението (да правим избор всеки път преди вмъкване/актуализация), или можем да коригираме това нещо структурно, като дефинираме Composite UNIQUE ограничение за (student_id, course_id) .

Сега първичният ключ е основно УНИКАЛЕН, НЕ НУЛЕН ключ. Ако погледнете дефиницията на вашата таблица, това новодефинирано ограничение UNIQUE е основно само първичен ключ (защото полетата също НЕ са NULL). Така че, в този конкретен случай, всъщност не е необходимо да използвате сурогатен първичен ключ id .

Разликата в режийните разходи по време на произволен DML (Вмъкване/Актуализиране/Изтриване) ще бъде минимална, тъй като също ще имате подобни режийни разходи, когато използвате само УНИКАЛЕН индекс. Така че можете по-скоро да дефинирате естествен първичен композитен ключ (student_id, course_id) :

-- Drop the id column
ALTER TABLE students_courses DROP COLUMN id;

-- Add the composite Primary Key
ALTER TABLE students_courses ADD PRIMARY(student_id, course_id);

По-горе също ще наложи ограничението UNIQUE върху комбинацията от (student_id, course_id) . Освен това ще спестите 4 байта на ред (размер на int е 4 байта). Това ще ви дойде удобно, когато имате големи маси.

Сега, докато се присъединявате от students към students_courses таблицата над Първичния ключ ще бъде достатъчен индекс. Въпреки това, ако трябва да се присъедините от courses към students_courses таблица, ще ви трябва друг ключ за тази цел. Така че можете да дефинирате още един ключ в course_id както следва:

ALTER TABLE students_courses ADD INDEX (course_id);

Освен това трябва да дефинирате ограничения на външния ключ, за да осигурите целостта на данните:

ALTER TABLE students_courses ADD FOREIGN KEY (student_id) 
                             REFERENCES students(student_id);

ALTER TABLE students_courses ADD FOREIGN KEY (course_id) 
                             REFERENCES courses(course_id);



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Python SQLAlchemy - MySQL сървърът е изчезнал

  2. Обяснена функция на MySQL IF().

  3. Разстояние в метри между две пространствени точки в MySQL заявка

  4. Кога да се използва NULL в MySQL таблици

  5. Как мога да тествам моя пример за инжектиране на PHP MySQL?