Существует таблица, содержащая больше идентификационных данных, чем реальные данные.Первичный ключ MySQL InnoDB со многими столбцами
user_id int unsigned NOT NULL,
project_id int unsigned NOT NULL,
folder_id int unsigned NOT NULL,
file_id int unsigned NOT NULL,
data TEXT NOT NULL
Единственный способ, чтобы создать уникальный первичный ключ для этой таблицы будет композит (user_id, project_id, folder_id, file_id). Я часто видел 2 столбца составных первичных ключей, но это нормально, чтобы иметь 4 или даже больше? Согласно MySQL: «Все хранилища поддерживают не менее 16 индексов на таблицу и общую длину индекса не менее 256 байтов. Большинство движков хранения имеют более высокие пределы», поэтому я знаю, по крайней мере, это можно сделать.
Прошлое, есть частые запросы к этой таблице для различных комбинаций этих идентификаторов. Например, найдите все проекты для пользователя X, найдите все файлы для пользователя X, найдите все файлы для проекта Y и папку Z и т. Д. Если на каждом из столбцов идентификатора есть отдельный индивидуальный ключ или если есть составной первичный ключ, который уже содержит все столбцы, делает лишние отдельные ключи избыточными? В любой момент в таблице будет около 10 миллионов - 50 миллионов строк.
Подводя итог: хорошо ли иметь составной первичный ключ с 4 (или более) столбцами id, а если есть составной ключ, он делает лишние отдельные ключи для каждого из этих столбцов избыточными?
Насколько я знаю, нет ничего, что сделало бы первичный ключ n-column плохой идеей, если это помогает поддерживать нормализацию данных. Кроме того, я бы создал отдельные индексы для полей, на которых будут самые условия 'where'. – Barranka