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

Sua*_*ard 1 mysql database database-design social-networking

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

表一:“用户”

  • 用户身份
  • 用户名
  • 年龄
  • 等等。

表二:“帖子”

  • 邮编
  • 帖子内容
  • 邮政作者
  • 发布日期
  • 等等

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

表三:“媒体”

  • ID
  • 类型
  • 上传者
  • 等等。

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

Jus*_*808 5

一般来说,要设计一个数据库,您需要为要处理的每个对象创建一个表。在你比如你有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
Run Code Online (Sandbox Code Playgroud)

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

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

[Users]
ID
Username
PasswordHash
Age
Birthdate
JoinDate
LastLogin

[Emails]
ID
UserID
Email
Run Code Online (Sandbox Code Playgroud)

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

更新

要与朋友打交道,您应该考虑您正在处理的关系。有一 (1) 个人有很多朋友。关于上面的表格,它的一个用户到多个用户。这可以通过一个特殊的表格来完成,该表格除了您正在寻找的关系之外不包含任何信息。

[Friends]
[UserA]
[UserB]
Run Code Online (Sandbox Code Playgroud)

因此,如果当前用户的 ID 在 A 中,则他朋友的 ID 在 B 中,反之亦然。这建立了友谊,如果你是我的朋友,那么我就是你的朋友。没有你是我的,我就无法成为你的朋友。如果你想设置一种方式友谊的能力,你可以像这样设置表格:

[Friends]
[UserID]
[FriendID]
Run Code Online (Sandbox Code Playgroud)

因此,如果我们彼此都是朋友,则必须有 2 个记录,一个是我与您的友谊,另一个是您与我的友谊。