Я не уверен, почему я борюсь с этим, это кажется очень простой концепцией. Поэтому моя борьба заставляет меня думать, что, возможно, мое моделирование данных нуждается в другом компоненте …
Я использую Laravel 5 и пытаюсь определить некоторые модельные отношения. BelongsTo
,HasA
и т. д. Прежде чем я смогу написать код, мне нужно хотя бы концептуально понять, какой тип отношений я создаю.
У меня есть приложение, куда пользователи могут отправлять реферальные ссылки людям, если человек нажимает на ссылку и регистрируется, его запись пользователя записывает код, который их пересылал. Таким образом, я могу отследить и посмотреть, кто ссылался на конкретного пользователя. Но реферал НЕ обязателен, чтобы зарегистрироваться
Таблицы:
ПОЛЬЗОВАТЕЛИ
+----+-------------+
| id | referral_id |
+----+-------------+
| 1 | 1 |
| 2 | null |
| 3 | 2 |
+----+-------------+
ОБРАЩЕНИЯ
+----+---------------+---------+
| id | referral_code | user_id |
+----+---------------+---------+
| 1 | 12345 | 2 |
| 2 | 54321 | 2 |
| 3 | 99999 | 2 |
+----+---------------+---------+
USERS.REFERRAL_ID
Рекомендации REFERRALS.ID
а также
REFERRALS.USER_ID
Рекомендации USERS.ID
Но что это за отношения?
Единственное, что мне кажется очевидным, это то, что REFERRALS.USER_ID
принадлежит USERS
,
Но что насчет USERS.REFERRAL_ID
говоря это belongsTo
Рефералы не чувствуются правильными, так как эта запись не требуется, и я не чувствую, что она каким-то образом «владеет» пользователем. Сказать это hasA
реферал также не выглядит корректным, так как опять пользователь не владеет или даже не требует реферала.
Я думаю, что меня смущает то, что REFERRALS
это необязательный объект.
Как я должен осмыслить отношения между USERS.REFERRAL_ID
а также REFERRALS.ID
?
Разве это плохо иметь такую «круговую ссылку»? Будет ли мне лучше создать сводную таблицу?
Нет необходимости добавлять какие-либо ссылки на таблицу рефералов в таблице User, у вас уже есть это отношение, определенное в таблице рефералов (столбец user_id)
Дальнейшее чтение: https://en.wikipedia.org/wiki/Database_normalization
Отношения это
USER has many REFERRALS
REFERRAL belongs to USER ( inviter )
REFERRAL belongs to USER ( invitee )
Измените свою таблицу РЕФЕРРАСОВ
+----+---------------+---------+------------+
| id | referral_code | user_id | invitee_id |
+----+---------------+---------+------------+
| 1 | 12345 | 2 | 1 |
| 2 | 54321 | 1 | null |
| 3 | 99999 | 3 | 1 |
+----+---------------+---------+------------+
user_id — идентификатор пользователя, отправляющего приглашение
инвайт_иде — это идентификатор пользователя, который принимает и регистрирует
Аргумент invitle_id имеет значение nullable () и будет содержать идентификатор приглашенного из таблицы пользователей, когда они присоединятся.
Думайте об этом как о таблице JOIN между приглашающим и приглашенным.
Других решений пока нет …