假设我有一个名为 的表users
,其中包含电子邮件和密码等基本用户信息,并且我还有一个名为 的表clients
。
客户端是一种用户类型,因此它将有一个字段来保存表中相应用户的 id users
,类似于 的字段user_id
。
现在假设有一些特定于客户端的表,然后需要存储客户端的 id,如下所示:
用户表:
客户表:
ID | 姓名 | 用户身份 |
---|---|---|
1 | 用户1 | 1 |
2 | 用户2 | 2 |
课程表:
ID | 姓名 | 客户ID |
---|---|---|
1 | 课程1 | 1 |
2 | 课程2 | 2 |
现在我真正不知道的是我应该在 Courses 表中保存什么 id 。
我应该保存client_id
来自客户端表还是应该将用户表中的用户 ID 保存为客户端 ID。
我真的不知道,因为客户是一种用户类型,只有客户可以购买课程,而不是所有类型的用户,另一方面,没有用户就不存在客户,真正令人困惑的是,如果我使用用户 ID 而不是客户端 ID 那么该字段应该称为“user_id”?但这样的话它就会变得通用,因为只有客户才能上课程。
那么最好的方法是什么:
1 - 命名字段client_id
并从客户表中添加客户的 id,然后获取与该客户相关的用户(我倾向于这个)。
2 - 命名字段client_id
并存储用户表中的用户 ID,并获取关联的客户端(这有点令人困惑,但从层次结构上讲可能是有意义的,因为没有用户就没有客户端)。
3 - 命名字段user_id
并存储用户表中的用户 ID(这种方法确实打破了我的观点,因为user_id
可以是任何用户,但只有客户端类型的用户可以有课程)。
- - - - - - - - - - - - - - -更新 - - - - - - - - - - -----
所以我认为我的问题不清楚,所以我会澄清。
我想知道的是,是否有关于此主题的最佳实践,因为由于关系,我存储和检索数据的方式将直接影响我在应用程序中检索数据的方式。
现在,在真实的情况下,我有 3 个表: table users
、 tableclients
和 table courses
。
该表clients
仅包含不适合表的字段users
,因为我将拥有更多类型的用户,这些用户也将在其他表中,就像administradors
这也是一种用户类型。
现在,考虑到没有用户就不会存在客户,并且考虑到只有客户可以进行购买来购买课程,例如,我应该将哪个 id 存储在client_id
表中courses
,表中的 idclients
或表中的 id users
。
例如,只有客户可以购买产品,但客户(clients
表)属于用户(users
表)。在表中,假设purchased_products
包含一个名为 的字段client_id
,我应该从表中获取客户端的 idclients
还是从表中获取用户的 id users
?
两者对我来说都有意义,而且无论我真正想知道什么在这里更有意义,我都能够检索数据:
1 - 如果我将表中的 id 存储clients
在 中courses.client_id
,我会像这样检索用户:从$client->user
层次结构上讲,这没有意义,因为用户位于客户端之前,而不是相反,但至少它是表的 idclient
存储在courses.client_id
.
2 - 如果我将表的 id 存储users
在 中courses.client_id
,我会以一种更有意义的方式检索数据,例如$user->client but I fell like the name of the field should not be
course.client_id but rather
course.user_id`,但这也会很糟糕,因为并非所有用户都可以购买课程,因此可能会产生误导。
在第一个示例中包含与该客户端的$client
表clients
和 $client->user users` 相关的所有信息。would access all information related to the table
在第二个示例中包含与该用户的$user
表users
和 $user->client客户端相关的所有信息。would access all information related to the table
同样,这更多的是一个语义问题,使事情更有条理。
答对了!
您有一个业务规则,指出关系是 [Purchased_]Course 和Client之间的关系,而不是 [Purchased_]Course 和User之间的关系。因此,您可以将客户的密钥存储在 Purchased_Course 表中。
是的; 我在这里添加了另一张桌子。
请记住,课程可以独立存在,无需任何人购买,因此需要一个自己的表格。课程和客户购买课程时的关系需要第三张表。