gpt4 book ai didi

database - 关联一些表的最佳方式是什么?

转载 作者:搜寻专家 更新时间:2023-10-30 23:16:55 24 4
gpt4 key购买 nike

我想制作一个应用程序,其中会有不同的用户,每个用户都有一组 friend ,这些 friend 将被分类。会有一些默认类别,但用户可以添加自己的类别。我想知道哪种方法最好。

我的想法是有 3 个表 - 用户、 friend 和类别。

用户表有 friend 和类别的字段(一对多)(但我不知道用户表是否需要任何关于 friend 和类别的信息)。

friend 表有一个类别字段(一对多)和一个用户字段(多对一)。

包含用户(多对多?)和 friend (多对多?)字段的类别表。

我也不确定这些关系。我将 PHP 与 MySQL 以及 Symfony2 和 Doctrine2 一起使用。请帮忙!


编辑

也许我没有准确描述我需要什么。打开应用程序时,您会看到一个登录表单。如果您没有帐户,您应该注册 - 注册会创建一个新用户。这个用户没有与其他用户连接(我还是编程新手,我想要一些更简单的东西,比如电话簿)。每个用户都有一个 friend 列表, friend 是表格中的一行,包含姓名、地址、电话、电子邮件、照片、生日等字段,但它们是由当前用户添加的。 friend 不是用户。每个用户实际上都是一个带有密码和用户名的帐户,当您登录时,只有一个 friend 列表。所以每个用户都为自己创建类别,他与其他用户及其类别无关。该类别将只有 ID 和名称。

所以我们的想法是,您创建一个帐户,然后创建一些类别并向其中添加 friend ,以便在您的 friend 出生或他们居住的地方,或者他们的电话号码时有一个组织者,但是您创建它们并添加关于他们的信息,他们是给用户自己的。它不像社交网络。只是一个笔记本,每个用户都可以在其中写下关于他 friend 的信息。

最佳答案

首先需要了解intersection tables的作用:如果用户 A 将用户 B 标记为 friend (即 user 与其自身存在多对多关系),并且您创建一个新表来表示该关系(friends 表),关于这个“友谊”的任何附加信息都应该链接到那个表。因此,如果用户以某种方式对他的 friend 进行分类,则该类别适用于 friends,而不适用于 usercategoryuser 之间不需要关系 为此特定目的

更新:由于 friend 不是用户,friends 表将不是交集表(因此只有一个返回给user 的引用>,表示“所有者”),但答案的其余部分仍然适用。

我假设每个类别都是 category 表中的一行。可能会添加关于该类别的附加信息,但应仅限于此。例如,如果您想知道哪个用户创建了一个类别,您可以向 user 添加一个外键,标记为例如“owner”或“created_by”。如果一个用户创建的类别不被其他人看到,这可能会很有用。

最后,您可以将 friendscategory 联系起来。如果用户 A 最多可以将用户 B 归入一个类别,那么从 friendscategory 的外键就足够了(即一对多关系)。否则,您可能需要另一个多对多关系,因此应该创建一个额外的交集表(例如 friend_category)。

您可以通过使用 denormalization 来避免这个额外的表格,在 friends 中有多行,其中两个用户相同(并且顺序相同)但类别不同(另请参见 this example )。这是否有利超出了这个答案的范围,但恕我直言,目前使用额外的表更好(它可能看起来更复杂,但从长远来看会更容易维护)。 (更新:如果 friends 不是交集表,像这样的非规范化并不是真正的选择,所以坚持使用 friend_category 表)

最后,您的布局将如下所示:

user              friends           friend_category   category
---- ------- --------------- --------
(user fields) <-- user (owner) <-- friend (category fields)
(friend fields) category --> user (owner) --+
^ |
| |
+--------------------------------------------------------------------+

关于database - 关联一些表的最佳方式是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12067663/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com