我是网络开发的新手,我正在尝试实施一个网站,用户可以在个人资料页面上上传照片和其他文件(例如.doc,.xls,.ppt,.txt,.pdf等),帖子和评论。我正在使用s3存储桶进行文件存储,并将使用mysql数据库来存储文件URL和其他关联数据。我感到困惑的是以下几点:
其中哪一个是最好的主意?
a)为以下各项创建文件表:个人资料,帖子,评论,然后获取与指定对象(帖子,评论或个人资料)的ID(A FK)相关联的所有文件。
b)创建一个文件表,其中有一个名为“type”的字段,可以是“profile”,“post”,“comment” 和一个名为“id”的字段,它是“类型”字段中指定的表的id的FK。
c)使用完全不同的模式,任何人都发现更有利编辑:我希望每个文件都与上传者(user_id)相关联,但也附加到上传的实体(即个人资料,帖子,评论)
答案 0 :(得分:2)
我会创建一个表Files
,如
Files
|id|file_path|...(other information about the file)
如果Post
,Comment
和Profile
只能包含一个文件,您可以直接在表格中添加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)