Первичный ключ стороны-владельца в качестве столбца соединения

ПРИМЕЧАНИЕ: Тема длинная, но подробная и может пригодиться, если вы используете отношения Doctrine2 и oneToOne.

Недавно я столкнулся с проблемой в Doctrine:

Я создал объекты User и UserData с двунаправленным отношением oneToOne:

User:
...
  oneToOne:
    userdata:
      targetEntity: UserData
      mappedBy: user

UserData:
...
  oneToOne:
    user:
      targetEntity: User
      inversedBy: userdata

Таким образом, UserData был владельцем со столбцом user_id в нем:

user: id, ...
userdata: id, user_id, ...

Это создало проблему, где каждый раз, когда вы извлекаете объект пользователя (один пользователь, набор пользователей или набор других объектов, к которым присоединился пользователь), Doctrine будет лениво загружать объект пользователя для каждого пользователя.

Проблема, описанная здесь:

Предлагаемое решение описано здесь:

Таким образом, есть 3 способа обойти это:

  1. Подождите и посмотрите, учтено ли предлагаемое решение в Doctrine и исправлено ли оно в будущих выпусках (возможно, не произойдет)
  2. Вручную оставил соединение UserData с User в каждом запросе (по-прежнему пустая трата ресурсов, UserData не нужны)
  3. Переключите обратную сторону и сделайте User стороной-владельцем.

Я решил остановиться на №3.Таким образом, мои отношения схемы теперь выглядят следующим образом:

User:
...
  oneToOne:
    userdata:
      targetEntity: UserData
      inversedBy: user

UserData:
...
  oneToOne:
    user:
      targetEntity: User
      mappedBy: userdata

Это означает, что мои таблицы теперь выглядят так:

user: id, userdata_id, ...
userdata: id, ...

Я решил, что вместо автоматического увеличения Userdata.id я установлю его вручную и сопоставлю с user.id. Это означает, что UserData.id всегда будет соответствовать user.id.

ВопросМожно ли использовать user.id (первичный автоматически увеличивающийся ключ) в качестве joinColum вместо userdata_id, поскольку они всегда будут иметь одно и то же значение? Видите ли вы какие-либо потенциальные проблемы с таким способом ведения дел?

Приветствуются любые другие советы или мнения по этому вопросу.

22
задан Community 23 May 2017 в 12:09
поделиться