2012-07-17 117 views
2

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

哪一个是最好的主意?

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

b)创建一个文件表,其中包含一个名为“type”的字段,该字段可以是“profile”,“post”,“comment” 以及名为“id”的字段,该字段是在“类型”字段中指定的表格。

三)使用任何人发现更有利一种完全不同的模式

编辑:我想每个文件相关联的上传(USER_ID),而且还连接到它是在(即轮廓,后上传的实体,评论)

+0

这不是一个充实的问题。由于不同的原因,这些不同的方法可能有效你需要声明更多的不变量,也许还有一些原因可能会让人感到不舒服。 – 2012-07-17 20:48:36

回答

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| 
+0

我想我会需要一些映射表,因为对于所有的情况(帖子,评论,配置文件),你可以上传多个文件 – user1532886 2012-07-17 20:54:54

+0

然后你需要每个映射表,这应该是最干净的方式。 – tbraun89 2012-07-17 20:56:53

0

不要文件总是属于同一个“东西”,在你的情况可能是用户,或UserProfile或Person?

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

像这样的东西可以工作

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

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

现在,这是因为如果你想链接到用户的文件直接在模型中,但你可能想拥有它们链接到他们被安置,喜欢的讯息在Facebook。在这种情况下,我会将文件链接作为帖子内容的一部分并将帖子链接到用户。

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

+0

是的,文件由上传者(用户)拥有,并与其上传的内容类型(帖子,评论,个人资料页面)关联 – user1532886 2012-07-17 20:59:57

+0

基于如此少量的信息很难想出正确的数据库模型,真的。你从显示角度思考。你的主要问题是问自己是'我需要显示位置X,Y和Z'的文件。我如何在数据库中表现这一点。我认为你应该阅读一些数据库设计教程,然后问自己这个问题:'我的系统中的实体如何真正融合在一起'。或者你应该更多地了解你的确切意图是什么。如何显示'文件',在哪里,如何输入等。 – Julius 2012-07-17 21:07:20

+0

本教程可能会有所帮助http://en.tekstenuitleg.net/articles/software/database-design-tutorial/intro.html它的目标是在初学者的数据库设计中 – Julius 2012-07-17 21:13:04

0

正如你所说,你是网络开发新手。

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

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

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

+0

即使我听说mongodb的学习曲线相对较低,但我将来可能会转向NOSQL解决方案。尽管如此,我认为使用我更熟悉的技术(mysql)会更聪明。但我很好奇,NOSQL如何让我上面提出的问题变得更简单? – user1532886 2012-07-17 21:10:48

+0

它不会。传统关系数据库和平面nosql数据库都有学习曲线,需要您考虑如何构建数据。如果你必须学习,那么你可能更擅长挖掘关系数据库,因为它们的使用频率更高,如果你知道的话,你可以使用任何关系数据库的基本知识。 – Julius 2012-07-17 21:21:58

+0

感谢您的洞察! – user1532886 2012-07-17 21:26:20

相关问题