2

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

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

a) 为以下各项创建文件表:profiles、posts、comments,然后获取与指定对象(post、comment 或 profile)的 id(A FK) 关联的所有文件。

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

c) 使用任何人都认为更有利的完全不同的模式

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

4

3 回答 3

3

我会创建一张Files

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

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

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

如果他们可以拥有多个文件,您将需要一个映射表,例如:

Posts
|id|data|...

Posts_Files_Mapping
|post_id|file_id|
于 2012-07-17T20:49:07.580 回答
0

文件是否总是属于同一个“事物”,在您的情况下可能是用户、用户配置文件或人员?

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

像这样的东西可以工作

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

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

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

这取决于您的需求是什么。

于 2012-07-17T20:57:04.183 回答
0

正如您所说,您是 Web 开发的新手。

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

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

但是不要认为这是一个简单的出路,您仍然必须对建模数据的最佳方法有一个很好的理解。

于 2012-07-17T20:59:22.733 回答