php文件管理器数据库设计(mysql)

标签 php mysql database database-design

关于图像的信息(宽度/高度)无关紧要。如果我需要,我会把它放在另一个表中,但我不需要图像信息。您如何看待这个数据库设计?对于特定表,您如何看待 MyISAM 与 InnoDB?

谢谢,我感谢任何反馈。

DROP TABLE IF EXISTS `directory`;
CREATE TABLE `directory` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
  `parent_id` int(11) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;

DROP TABLE IF EXISTS `file`;
CREATE TABLE `file` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
  `fk_directory_id` int(11) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;

DROP TABLE IF EXISTS `tag`;
CREATE TABLE `tag` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;

DROP TABLE IF EXISTS `tags_files`;
CREATE TABLE `tags_files` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `fk_file_id` int(11) DEFAULT NULL,
  `fk_tag_id` int(11) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;

最佳答案

  • name 应该是唯一的

  • 并且由于区分大小写,不应在此列中使用 utf8_unicide_ci

例如,在linux中(不是在window中)

example.jpg != example.JPG

使用ci会导致名称唯一性问题

  • 如果需要大量写入,innodb应该更合适

  • 其他图像的附加信息,如宽度、高度可以存储到表格中,以便于搜索/过滤

  • 您不太可能希望保留文件的版本,但您应该存储有关创建者的信息(如 user_id),因此,您可以轻松地追溯信息

关于php文件管理器数据库设计(mysql),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4645154/

相关文章:

php - Composer psr-4 自动加载问题

mySQL 触发器 : Setting empty to NULL, 在最后一列上不起作用

MySQL触发器更新具有多对多关系的所有条目

php - SQL 使用 PDO 获取单个标量

php - Youtube Analytics API PHP 查询无效。查询不符合预期

php - Mysql 或 PHP 无法正确转换引号

php - 如何在wordpress主题中编辑html代码

php - PDO - 搜索是查询整个术语而不是单独查询每个术语

sql - MYSQL 中多态关联的最佳实践

php - Zend Framework 多数据库停止使用慢速查询