Нужно создать внешний ключ при создании таблицы на Rails? - PullRequest
8 голосов
/ 01 декабря 2011

Я сейчас начинаю на Rails, я посмотрел на форуме, но я не нашел ничего, что могло бы решить мою проблему.

Итак, у меня есть таблица категорий, и в ней есть только имя для столбца (в категориях нет повторений), поэтому я хотел бы, чтобы имя было первичным ключом, тогда у меня есть таблица Product с именем, main_photo, description, и я хотел бы сказать, что у продукта есть только категория. Нужно ли мне добавлять столбец с именем category в качестве внешнего ключа в продуктах?

В категории есть много товаров.

Тогда в моделях категорий, как я могу сказать, что имя является первичным ключом, и как я могу сделать соответствие между предложенным именем первичного ключа в категориях и категорией в продуктах?

Ответы [ 2 ]

15 голосов
/ 01 декабря 2011

Ограничения внешнего ключа в Active Record используются не очень часто, поскольку идеология Active Record гласит, что этот вид логики должен принадлежать модели, а не базе данных - база данных - просто тупое хранилище: http://guides.rubyonrails.org/migrations.html#active-record-and-referential-integrity.

Способ Rails состоит в том, чтобы иметь столбец ID во всех таблицах, включая таблицу категорий, а в вашей таблице продуктов - столбец Category_ID.Обратите внимание, что имена таблиц являются множественными.

Затем в вашей модели вы определяете отношения между сущностями Product и Category.Прочтите статью Руководство по ассоциациям активных записей , и она ответит на все ваши вопросы, особенно разделы 2.1, 2.2 и 3.3.

6 голосов
/ 02 декабря 2011

Есть много веских причин иметь внешние ключи в вашей базе данных.См. Нужны ли Rails ограничения на уровне базы данных?

Я рекомендую Foreigner , если вы хотите легко добавить внешние ключи в приложение Rails.

...