Три.
Первым предложением может быть удаление ключей композита и добавление нового поля для автоматического ключа, которое не связано с другими полями. Для мастер-таблицы и таблицы деталей.
Это может быть целочисленный автоинкрементный ключ или глобальный уникальный идентификатор. Хранение составных ключей в любом S.Q.L. Марка сервера сложна, а иногда и чрезмерно сложна.
Но если вам нужно сохранить составной ключ в главной таблице, вы все равно можете спросить, как обращаться с первичным ключом ведомой таблицы. Многие разработчики обычно берут те же поля для первичного ключа из основной таблицы, помещают его в таблицу ведомых / подробных данных и добавляют дополнительный последовательный целочисленный ключ. Но, как вы упоминаете, если вам нужно изменить ключ для основной таблицы и сохранить уже существующие строки подробностей, у вас возникнут проблемы с ограничениями ссылочной целостности.
Резюме: Я предлагаю добавить новое поле для ведомой таблицы, которое не связано с главной таблицей, добавить внешний ключ полей в таблицу ведомых / подробных данных, которая ссылается на основную таблицу. Оставьте независимый первичный ключ и внешний ключ в главной таблице.