"有A"或"属于"关系或其他什么?

时间:2016-04-01 01:20:31

标签: php mysql laravel entity-relationship

我不确定为什么我会挣扎于此,这似乎是一个非常简单的概念。所以我的努力​​让我觉得也许我的数据建模需要另一个组件......

我正在使用Laravel 5并尝试定义一些模型关系。 BelongsToHasA等。在我编写代码之前,我至少需要在概念上理解我正在创建的关系类型。

我有一个应用程序,用户可以在哪里发送人员推荐链接,如果有人点击链接并注册,他们的用户记录会记录引用它们的代码。通过这种方式,我可以追溯并查看谁引用了特定用户。但是,无需报名参加

表格:

用户

+----+-------------+
| id | referral_id |
+----+-------------+
|  1 | 1           |
|  2 | null        |
|  3 | 2           |
+----+-------------+

REFERRALS

+----+---------------+---------+
| 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推荐感觉不对,因为该记录并不是必需的,我不会感觉到它是&#39 ;拥有'用户无论如何。说它hasA推荐也感觉不正确,因为用户再次拥有甚至不需要推荐。

我想让我感到困惑的是REFERRALS是一个可选实体。

我应该如何概念化USERS.REFERRAL_IDREFERRALS.ID之间的关系?

有这种"循环参考"?我最好创建一个数据透视表吗?

1 个答案:

答案 0 :(得分:0)

无需在User表中添加对Referrals表的任何引用,您已经在引用表(user_id列)中定义了该关系

进一步阅读:https://en.wikipedia.org/wiki/Database_normalization

关系是

USER has many REFERRALS 
REFERRAL belongs to USER ( inviter )
REFERRAL belongs to USER ( invitee )

修改您的REFERRALS表

+----+---------------+---------+------------+
| id | referral_code | user_id | invitee_id |
+----+---------------+---------+------------+
|  1 |         12345 |       2 |          1 |
|  2 |         54321 |       1 |       null |
|  3 |         99999 |       3 |          1 |
+----+---------------+---------+------------+

user_id是发送邀请的用户的ID

invitee_id是接受并注册

的用户的ID

invitee_id列是nullable(),并且在加入时将包含来自users表的被邀请者的ID。

将其视为邀请者和被邀请者之间的JOIN表。