Почему отказ от составных ключей в пользу всех таблиц, использующих один первичный ключ с именем id? Потому что, как правило, все ORM следуют этому.
EDIT
Я только начал изучать ruby на рельсах, и в книге agile development by pragmatic есть строка: ---
Rails действительно не работают слишком хорошо, если в каждой таблице нет числового первичного ключа. Менее суетливое название колонки.
Такую же строчку я прочитал, когда изучал Учение.
EDIT2
Пожалуйста, проверьте эту ссылку тоже. Я все больше и больше путаюсь с этой вещью: ---
Составные первичные ключи и поле уникального идентификатора объекта
Из приведенной выше ссылки: -
* первичный ключ должен быть постоянным и бессмысленным; несуррогатные ключи обычно не соответствуют одному или обоим требованиям, в конечном итоге
Если ключ не постоянный, у вас есть проблема с обновлением в будущем, которая может быть довольно сложной
если ключ не бессмысленный, то он с большей вероятностью изменится, то есть не будет постоянным; см. выше
Возьмем простой, распространенный пример: таблица инвентарных предметов. Может быть заманчиво сделать первичным ключом номер элемента (номер SKU, штрих-код, код детали или что-то еще), но через год все номера элементов меняются, и у вас остается очень грязное обновление всего проблема с базой данных ...
РЕДАКТИРОВАТЬ: есть еще одна проблема, которая более практична, чем философская. Во многих случаях вы собираетесь как-то найти определенную строку, а затем обновить ее или найти ее снова (или обе). С составными ключами, есть больше данных для отслеживания и больше ограничений в предложении WHERE для повторного поиска или обновления (или удаления). Также возможно, что один из ключевых сегментов мог измениться за это время! С суррогатным ключом всегда остается только одно значение (суррогатный идентификатор), и по определению оно не может измениться, что значительно упрощает ситуацию. *