Если бы это было до меня ...
Вам необходимо удовлетворить требования базы данных и ваших приложений.
Добавление автоматически увеличивающегося столбца целого числа или длинного идентификатора в каждую таблицу для использования в качестве первичного ключа отвечает требованиям базы данных.
Затем вы добавите в таблицу хотя бы еще один уникальный индекс для использования вашим приложением. Это может быть индекс для employee_id, account_id, customer_id и т. Д. Если возможно, этот индекс не должен быть составным.
Я бы предпочел индексы по нескольким полям индивидуально, а не составные индексы. База данных будет использовать индексы одного поля всякий раз, когда предложение where включает эти поля, но она будет использовать составной только тогда, когда вы предоставите поля в правильном порядке - это означает, что она не может использовать второе поле в составном индексе, если вы не предоставите и первое и второе в предложении where.
Я полностью согласен с использованием вычисляемых индексов или индексов типов функций - и рекомендовал бы использовать их над составными индексами. Это позволяет очень легко использовать индекс функции, используя ту же функцию в предложении where.
Это позаботится о требованиях вашего приложения.
Весьма вероятно, что другие неосновные индексы на самом деле являются отображениями значения ключа этого индекса в значение первичного ключа, а не rowid (). Это позволяет выполнять физические операции сортировки и удаления без повторного создания этих индексов.