- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我想制作一个应用程序,其中会有不同的用户,每个用户都有一组 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
,而不适用于 user
。 category
和 user
之间不需要关系 为此特定目的。
更新:由于 friend 不是用户,friends
表将不是交集表(因此只有一个返回给user
的引用>,表示“所有者”),但答案的其余部分仍然适用。
我假设每个类别都是 category
表中的一行。可能会添加关于该类别的附加信息,但应仅限于此。例如,如果您想知道哪个用户创建了一个类别,您可以向 user
添加一个外键,标记为例如“owner”或“created_by”。如果一个用户创建的类别不被其他人看到,这可能会很有用。
最后,您可以将 friends
与 category
联系起来。如果用户 A 最多可以将用户 B 归入一个类别,那么从 friends
到 category
的外键就足够了(即一对多关系)。否则,您可能需要另一个多对多关系,因此应该创建一个额外的交集表(例如 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/
我们使用 Azure 弹性池,生成多个客户端数据库和一个引用客户端数据库的主数据库。 我们已经拥有多个数据库,并且正在开发新版本的代码。我们使用 EF6 代码优先。当我们对模型进行更改(添加属性)时,
我们使用 Azure 弹性池,生成多个客户端数据库和一个引用客户端数据库的主数据库。 我们已经拥有多个数据库,并且正在开发新版本的代码。我们使用 EF6 代码优先。当我们对模型进行更改(添加属性)时,
我希望将一些信息分发到不同的机器上,以便在没有任何网络开销的情况下实现高效和极快的访问。数据存在于关系模式中,实体之间的关系是“加入”的要求,但根本不是写入数据库的要求(它会离线生成)。 我非常相信
我使用 GrapheneDB 来托管我的 neo4j 数据库 (db)。 问题 我有 N客户并且正在寻找自动分离他们的内容(他们独特的数据库)的方法,以便: 它不重叠数据 操作速度不受影响。 选项 1
当服务器开始工作(Tomcat)时,日志显示此错误: org.springframework.beans.factory.BeanDefinitionStoreException: Invalid b
我在 Oracle 数据库实例中按以下方式创建了一个触发器。 CREATE OR REPLACE TRIGGER after_logon_on_database AFTER LOGON ON DATA
原谅我的无知,我是数据库约定的初学者。 这是我的 SQLite 代码:(由我的数据库浏览器自动生成) CREATE TABLE `ResearchItems` ( `ID` INTEGER NO
是的是的是的,我已经在整个互联网上搜索过这个问题。一些结果发现,甚至来自 Stackoverflow。但是他们中的大多数人说“你应该自动加载数据库”,或者“parent::__construct();
我正在创建一个 Mac 应用程序,它将一些数据保存到 SQLite 数据库中。问题是:当我关闭数据库并再次打开时,数据不存在了。这是我的代码: NSString *sql = [NSString st
我正在建立一个网站,我打算发布各种帖子,比如教程、文章等。我打算用 php 来管理它,但是当涉及到存储每个帖子的内容时,将要显示的文本,更好的选择是:使用单独的文本文件还是将其添加为数据库中的每个条目
关闭。这个问题需要更多focused .它目前不接受答案。 想改进这个问题吗? 更新问题,使其只关注一个问题 editing this post . 关闭 3 年前。 Improve this qu
对不起,这个关键字对我来说没有任何意义...有人可以给我一个定义吗? 提前致谢... 最佳答案 这是一个品牌。 http://pervasive.com/这是他们的数据库产品的链接 http://ww
我已经在 docker 版本 1.10.1 的 docker 镜像中安装了 PostgreSQL 9.4.6。根据这张官方图片: https://github.com/docker-library/p
当我的 android 应用程序尝试读取 android 短信数据库时,我遇到了这个崩溃。读取android短信数据库的代码类似于下面的代码 fragment : String SMS_URI = "
我有一个 public kit repo,我推送了 v1.0.3 并具有以下结构 go -database --database.go --go.mod --go.sum 我需要它 require g
关闭。这个问题需要更多focused .它目前不接受答案。 想改进这个问题吗? 更新问题,使其只关注一个问题 editing this post . 关闭 9 年前。 Improve this qu
我们正在使用MySQL数据库在Go中创建一个Web应用程序。我们的用户一次只能拥有一个活跃的客户端。就像Spotify一样,您一次只能在一台设备上听音乐。为此,我制作了一个映射,将用户ID和作为其值的
我已经尝试在 PostgreSQL 中创建数据库好几天了,遇到了几个问题,但似乎卡住了。 我在 PostgreSQL 中手动创建了一个名为 postgres_development 的数据库,因为 b
我正在创建一个 iMessage 应用程序,它需要连接到与我的常规应用程序相同的数据库。 我调用 FirebaseApp.configure() 并对用户进行身份验证,但出于某种原因,在所有 Data
就像std::unordered_map但所有数据都应存储在磁盘上而不是内存中。 按照我的理解,应该做两部分:索引和存储。我已经学习了一些关于索引的数据结构,比如 Linear-Hash 或 B-Tr
我是一名优秀的程序员,十分优秀!