1

У меня есть две модели, которые взаимно однозначны друг к другу. A в настоящее время имеет один B.Могут ли две модели принадлежать друг другу?

В последнее время я сталкиваюсь со многими случаями, когда желательно, чтобы A сохранял идентификатор B, чтобы упростить логику и повысить производительность. Однако интересно, если:

  1. это возможно
  2. нарушило бы и конвенции
  3. любые мысли действительно

UPDATE

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

Единственное, что я могу придумать, это найти все A, у которых нет B, требуется внутреннее соединение на каждой из моих 100000+ записей. Но если есть идентификатор, то я могу сразу узнать, у которого A есть B.

+0

Какие проблемы с производительностью вы видите на данный момент с помощью функции has_one/belongs_to? – Gareth

+0

В настоящее время мне нужно сделать LEFT OUT JOIN для запроса, который должен иметь различную логику запросов, основанную на существовании B, вместе с множеством других условий. – lulalala

+0

Пожалуйста, подробно расскажите о своих моделях и почему вам нужна круговая ссылка. – Antoine

ответ

0

Я не верю, что это возможно - вам нужно решить, где хранить внешний ключ. Будет ли вам разумно использовать соединение через отношения, и для ваших существующих моделей будет has_one через соединение?

0

Другой альтернативой является установка A id на B, т. Е. Денормализация. Это позволит вам выяснить, какие A без B, а A с B. Это может быть подходящим для сообщений о сценариях, когда B не перемещается между A часто.

Смежные вопросы