Назначает ли ActiveRecord ключ для каждой таблицы, используя соглашение об именах "ID", и если да, то почему? - PullRequest
1 голос
/ 12 декабря 2010

Насколько я понимаю, запись Actice основана на шаблоне объектно-реляционного отображения (ORM), описанном Мартином Фаулером в его книге «Шаблон архитектуры корпоративных приложений» (Addison-Wesley, 2002);в котором говорится, что существует однозначное соответствие между записью базы данных и объектом, который представляет ее в объектно-ориентированной программе (ООП).Когда создатель Rails Дэвид Хайнемайер (David Heinemeier) пытался внедрить ORM для своей платформы Rails, он основывал его на паттерне Фаулера.

Вот в чем проблема: назначает ли ActiveRecord суррогатный первичный ключ каждой таблице, используя соглашение об именах «ID»и если да, то почему?Причина, по которой я спрашиваю, заключается в том, что представляется более целесообразным назначить суррогатный первичный ключ, используя соглашение об именах "tablename_ID";как на самом деле кажется ActiveRecord делает при создании внешних ключей.Кроме того, возможно ли переопределить конфигурацию по умолчанию и назначить суррогатный первичный ключ, используя соглашение об именах "tablename_ID";Причина в том, что, особенно в случае первичных ключей, представляется хорошей идеей не использовать общее имя, поскольку различие между идентификаторами двух столбцов невозможно, если просто посмотреть на имена столбцов: ID, ID, ID.В качестве примера использования, где это появляется, будет проблема, если я экспортирую данные в одну таблицу из двух таблиц, будет два столбца с именем ID;когда я импортирую этот документ с обновлениями, может показаться, что по умолчанию невозможно сопоставить столбцы идентификаторов.

1 Ответ

3 голосов
/ 12 декабря 2010

Уже видно, что это за идентификатор, потому что он находится в определенной таблице.У вас нет table_name.table_name_id, но table_name.id.Мне нравится различие между внешними ключами и первичными ключами таким образом, но по общему признанию, это вопрос мнения.

Если у вас нет действительно веской причины использовать что-либо другое, вы должны придерживатьсяконвенция.Для этого и нужны условности.ActiveRecord дает вам возможность изменить его, например, так:

ActiveRecord::Base.primary_key_prefix_type = :table_name_with_underscore

Это задает способ генерации первичных ключей глобально.products.id становится products.product_id.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...