mysql - 用户驱动网站的数据库设计

标签 mysql database database-design social-networking

假设我想要一个需要存储用户信息、图像等以及存储状态更新或帖子/评论的 Web 应用程序,我是否想要分隔表格? 例如,如果我有一个“用户”表,其中包含用户信息,如密码、电子邮件和典型的社交网络信息,如年龄、位置等。创建第二个表(“帖子”)来处理用户内容是否是个好主意例如评论和/或帖子?

表一:“用户”

  • 用户名
  • 用户名
  • 年龄
  • 等等

表二:“帖子”

  • 帖子ID
  • 发布内容
  • 发表作者
  • 发布日期
  • 等等

这是一个有效的组织吗?此外,如果我想跟踪媒体,我应该在另一个表中这样做吗?

表三:“媒体”

  • 身份证
  • 类型
  • 上传者
  • 等等

非常感谢任何帮助。我很好奇我是在正确的轨道上还是完全迷路了。我主要想知道我是否应该有很多 table ,或者我是否应该有更大、更少隔离的 table 。 到目前为止还值得注意的是,我计划在“用户”表中保留诸如关注者(或 friend )之类的信息,但我不确定回想起来这是个好主意。 提前致谢,

最佳答案

一般来说,要设计一个数据库,您需要为每个要处理的对象创建一个表。在您的示例中,您有 UsersPostsCommentsMedia。从中您可以充实您想要为每个对象存储的内容。您要存储的每个项目都是表中的一个字段:

[Users]
ID
Username
PasswordHash
Age
Birthdate
Email
JoinDate
LastLogin

[Posts]
ID
UserID
Title
Content
CreateDate
PostedDate

[Comments]
ID
PostID
UserID
Content

[Media]
ID
Title
Description
FileURI

从上面看,您可以看到用于保存每个对象信息的基本结构。通过字段名称,您甚至可以分辨出对象之间的关系。这是一个帖子有一个 UserID 所以帖子是由该用户创建的。评论有一个 PostID 和一个 UserID,因此您可以看到评论是由某人为特定帖子撰写的。

一旦确定了一般字段,您就可以查看设计的其他一些方面。例如,现在 Users 表下的 Email 字段意味着用户可以拥有一 (1) 个电子邮件地址,仅此而已。您可以通过以下两种方式解决此问题... 添加更多电子邮件字段(EmailA、EmailB、EmailC) 如果您知道您正在处理特定类型的电子邮件,例如 EmailWork 或 EmailHome,这通常有效。如果您不知道总共有多少封电子邮件,这将不起作用。要解决这个问题,您可以将电子邮件拉出到它自己的表中:

[Users]
ID
Username
PasswordHash
Age
Birthdate
JoinDate
LastLogin

[Emails]
ID
UserID
Email

现在您可以为单个用户拥有任意数量的电子邮件。您几乎可以为您尝试设计的任何数据库执行此操作。分小步进行,根据需要将较大的对象分解成较小的对象。

更新

对待 friend 你应该考虑你正在处理的关系。一 (1) 个人有很多 friend 。关于上面的表格,它是一个用户对许多用户。这可以通过一个特殊的表来完成,该表除了您要查找的关系之外不包含任何信息。

[Friends]
[UserA]
[UserB]

因此,如果当前用户的 ID 在 A 中,则他 friend 的 ID 在 B 和 visa-verse 中。这建立了友谊,如果你是我的 friend ,那么我就是你的 friend 。如果你不是我的,我就无法成为你的 friend 。如果您想设置单向友谊的功能,您可以像这样设置表格:

[Friends]
[UserID]
[FriendID]

所以如果我们彼此都是 friend ,则必须有 2 个记录,一个是我对你的友谊,一个是你对我的友谊。

关于mysql - 用户驱动网站的数据库设计,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11571248/

相关文章:

database - #由于遵循NoMethodError而无法转储表“预订”#nil:NilClass的未定义方法'[]'

java - apache derby 与 mysql 之间有什么区别

mysql - 在mysql中计算登录时间间隔

python - sqlalchemy外键与父类的关系

sql - 在数据库中存储试题

ruby-on-rails - 将通知存储给用户的数据库设计

mysql - 数据库设计 MySQL 使用外键

mysql - 透视此联合查询的结果?

64 位 MySQL 的 PHP 年份 2038 问题无法通过 PHPMyAdmin 插入日期

mysql - 什么表结构可以提供更快的sql查询结果