#mysql #ruby-on-rails #activerecord
#mysql #ruby-on-rails #activerecord
Вопрос:
У меня есть компании, и у каждой компании есть несколько продуктов. Модели имеют следующее отношение-
класс Company < ActiveRecord::Base has_many :конечные продукты класс Products < ActiveRecord::Base belongs_to:конечная компания
Я хочу зарезервировать 1000 идентификаторов продуктов для каждой компании.
Итак
- Компания1 может иметь идентификаторы продуктов от 1 до 1000
- Компания2 может иметь идентификаторы продуктов от 1001-2000
Я хочу зарезервировать ПЕРВИЧНЫЕ ключи таблицы продуктов для каждой компании вместо того, чтобы иметь ограниченный первичный ключ и повторяющиеся идентификаторы (потому что потребитель / компания может запомнить идентификатор продукта и получить к нему доступ, используя url ‘…/product / 1000’).
Решение, которое я имею в виду — должен ли я создавать несколько последовательностей (по одной для каждой компании по мере создания компании). Со значением по умолчанию как (Company.ИДЕНТИФИКАТОР -1) * 1000 1. И используйте nextval для этой последовательности, когда продукт создается для компании 1. Я уверен, что у компании не будет 1000 продуктов в системе (маловероятно).
Можете ли вы предложить лучший подход?
Комментарии:
1. Почему вы хотите это сделать? Просто выполните обычное has_many <-> принадлежит ассоциации
2. Там уже есть has_many и принадлежит ассоциации. Компании будет легко получить доступ к продуктам. Мы показываем идентификатор продукта везде в приложении (у него нет имени).
Ответ №1:
Ваш план не очень хорош. Если у вас 50 компаний по 5 продуктов в каждой, теперь у вас в базе данных 50 000 строк. Базы данных постоянно сталкиваются с такими проблемами. Не рассчитывайте на то, что ваши клиенты запомнят идентификаторы базы данных. Упростите им поиск идентификаторов.
Вы должны организовать свою модель в rails следующим образом:
class Company < ApplicationRecord
has_many :products
end
class Products < ApplicationRecord
belongs_to :company
end
Попробуйте представить, как ваши изменения от нормы создают новые проблемы и получаете ли вы значительный стимул для своего дня, думая об отклонении от нормы. В вашем случае, если у компании 1001 продукт, вы просто создали намного больше работы для себя.
Комментарии:
1. Ассоциация есть. Продукты не имеют имен и идентифицируются по идентификаторам, и мы показываем идентификатор в пользовательском интерфейсе по всей системе. Продукт идентифицируется слишком многими параметрами, и я не могу сделать из него имя (пользователи уже хорошо разбираются в идентификации продуктов по идентификаторам)…
2. Как вы обращаетесь к компании со 1001 продуктом?
3. Вероятно, мне нужно назначить ему следующий доступный блок идентификаторов… У меня нет идеального решения, поэтому я ищу указатели. Это требование бизнеса. 🙁