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