mySQL 在一个或多个数据库表设计中存储文件详细信息以及创建父类和子类的最佳方式

标签 mysql performance database-design left-join

----- PHP 和 mySQL -----

我有两个简单的问题需要一些建议。

在我的网站上,我将允许用户上传以下文件 - PDF/视频/照片。用户上传的所有文件都显示在个人资料页面上。所有上传的文件都可以按名称或标签和文件类型进行搜索。

什么是最好的 mysql 数据库设计?

  1. 将所有文件存储在一个表中,更易于在用户的个人资料页面上显示和按类型搜索等。

  2. 每种类型一张表,例如pdf、视频和照片 <- 这对于性能来说可能更好,但对于搜索我不知道?

第二个问题是,我允许用户创建自己的菜单/类别,例如:

  • ->父类别
        • >子类别
        • >子类别
  • ->父类别

        • >子类别
        • >子类别

目前我有两个数据库表,一个存储每个用户的所有父类别,第二个存储带有外键 (id) 的子类别到父类别。

要获取所有类别,我首先获取所有父类别并使用 foreach 循环。 我在循环中调用一个函数以通过父 ID 获取子类别。

我想知道这是执行此操作的最佳方法还是可以在不循环的情况下在 mySQL 查询中完成?

谢谢大家!!!

最佳答案

对于您的第一个问题,这取决于您要存储有关文件的哪些信息。

如果它对所有类型(名称、日期、文件类型、大小等)都是通用的,那么单独一个带有类型列的文件表是有意义的。

但是,如果您要保存与文件类型相关的文件属性、视频文件的帧速率、图像文件的高度和宽度、PDF 的作者,例如,那么您还需要一些辅助表来存储该信息。您不希望文件表中有一堆仅对特定文件类型有用的列。

对于你的第二个问题,粗略的 SQL 是基于父类别表和子类别表之间的 JOIN。

示例伪代码:

select p.userid, p.parentcategoryid,c.childcategoryid 
from ParentCategory p INNER JOIN   
     ChildCategory c  
        on p.parentcategoryid=c.parentcategoryid
WHERE 
      p.userid = @UserID

关于mySQL 在一个或多个数据库表设计中存储文件详细信息以及创建父类和子类的最佳方式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8638909/

相关文章:

php - 在网页上显示数据库中的记录

javascript - 为什么 node.js 比 Google Chrome 慢得多?

c# - 将结构转换为对象以进行空值比较不会导致装箱吗?

php - MySQL如何处理大表? (游戏的数据库设计)

php - 高性能MySQL随机非连续行

mysql - 警告 : mysql_query() expects parameter 2 to be resource, bool 值在 C :\wamp\www\pyrll\emlhome. php 第 15 行给出

php - 从mysql中的时间戳字段过滤日期

php - 改善服务器响应时间

mysql - 数据库用户表设计,针对特定场景

mysql - 数据库设计: Best Way to store heterogeneous subtypes of a parent class?