在帖子,评论和个人资料页面上上传文件的数据库设计

时间:2012-07-17 20:42:26

标签: mysql database-design

我是网络开发的新手,我正在尝试实施一个网站,用户可以在个人资料页面上上传照片和其他文件(例如.doc,.xls,.ppt,.txt,.pdf等),帖子和评论。我正在使用s3存储桶进行文件存储,并将使用mysql数据库来存储文件URL和其他关联数据。我感到困惑的是以下几点:

其中哪一个是最好的主意?

a)为以下各项创建文件表:个人资料,帖子,评论,然后获取与指定对象(帖子,评论或个人资料)的ID(A FK)相关联的所有文件。

b)创建一个文件表,其中有一个名为“type”的字段,可以是“profile”,“post”,“comment” 和一个名为“id”的字段,它是“类型”字段中指定的表的id的FK。

c)使用完全不同的模式,任何人都发现更有利

编辑:我希望每个文件都与上传者(user_id)相关联,但也附加到上传的实体(即个人资料,帖子,评论)

3 个答案:

答案 0 :(得分:2)

我会创建一个表Files,如

Files
|id|file_path|...(other information about the file)

如果PostCommentProfile只能包含一个文件,您可以直接在表格中添加file_id,例如

Posts
|id|data|...|file_id|

如果他们可以有多个文件,你需要一个映射表,如:

Posts
|id|data|...

Posts_Files_Mapping
|post_id|file_id|

答案 1 :(得分:0)

文件是否总是属于同一个“东西”,在您的情况下可能是User,UserProfile还是Person?

在这种情况下,我会定义一组适用于所有类型文件的通用字段,并包含一个“类型”字段来区分文件类型。

这样的事情可以起作用

- User/Person/UserProfile/Account
userId (PK)
firstname
lastname

- File
fileId (PK)
title
description
fileType
userId (FK)
size

现在,这是一个模型,如果您希望您的文件直接链接到用户,但您可能希望将它们链接到它们所放置的帖子,就像在Facebook中一样。在这种情况下,我会将文件的链接作为帖子内容的一部分嵌入,并将帖子链接到用户。

这取决于您的需求。

答案 2 :(得分:0)

正如您所说,您不熟悉Web开发。

Pehaps你应该考虑跳过像mysql这样的关系类型数据库,并使用像mongodb这样的“NOSQL”数据库。

mongodb有许多好处,但主要的一个是“无方案”数据库的概念,它允许您在同一个集合/表中存储不同类型的数据。

但是不要认为这是一个简单的方法,你仍然需要很好地理解建模数据的最佳方法。