我正在设计数据库模式.用户可以加载某种类型的文件,如图像、文档.

因此,我决定创建一个包含所有用户上传文件的表:

CREATE TABLE UploadedFiles (
  file_id INT PRIMARY KEY,
  filename VARCHAR(255),
  type: VARCHAR(255),
  filepath VARCHAR(255),
  upload_date DATETIME,
  user_id INT(100)
);

让我们假设还有另一个表EventsPhotos:

CREATE TABLE EventsPhotos (
  photo_id INT PRIMARY KEY,
  file_id INT,
  event_id INT,
  FOREIGN KEY (file_id) REFERENCES UploadedFiles(file_id),
  FOREIGN KEY (event_id) REFERENCES Events(event_id)
);

这和UploadedFiles桌有关.

所以,我想要一些表格,如新闻照片,用户档案照片等,并参考这个表格.我想知道这种方法的表现如何.

推荐答案

您需要多张桌子吗?

CREATE TABLE UploadedFiles (
  photo_id  INT UNSIGNED NOT NULL,
  photo_type  TINYINT UNSIGNED,    -- news, userProfile, event, etc
  filename  VARCHAR(255) NOT NULL,
  type:  VARCHAR(255) NOT NULL,
  filepath  VARCHAR(255) NOT NULL,
  upload_date  DATETIME NOT NULL,
  user_id  INT UNSIGNED NOT NULL,
  PRIMARY KEY(photo_id)
);

然后为新闻、用户配置文件、事件等创建其他表,每个表都包含一个photo_id,外加新闻等所需的任何列.

比方说,"新闻"需要多张照片:

CREATE TABLE NewsPhotos (
    news_id INT  UNSIGNED NOT NULL,
    photo_id INT UNSIGNED NOT NULL,
    PRIMARY KEY(news_id, photo_id)
);

你可能会有多少排?一百万?这可能适用于我向您展示的内容;但让我们来看看查询,看看您是否需要更多的索引,等等.

Mysql相关问答推荐

无法从容器从APS. NET应用程序连接到MySQL服务器容器

嵌套MySQL语句问题

SQL中的搜索模式

SQL-从一个字段中 Select 值,但另一个字段中不包含零值

如果WHERE语句包含所有列,唯一键顺序是否重要?

用于搜索从各种表中获得的结果的查询

SQL/Pyspark -判断条件

子查询是否可以按主查询中的列进行分组?

在 .NET 6 中使用 Dapper Framework 未能成功连接到 MySql

MySQL 8.0 可以在 Select 语句中返回 JSON 对象数组吗?

Mysql根据文本语言或行数将列拆分为多列

谁能帮我优化低性能的mysql查询

处理 Visits 表中数百万行的最佳方法是什么?

估计行数 SQL

MySQL按连续值和计数分组

使用带有 ELSEIF 和 ELSE 的 3 列更新问题

在mysql中将纪元数转换为人类可读的日期

MYSQL_ROOT_PASSWORD 已设置但在 docker 容器中获取用户'root'@'localhost'的访问被拒绝(使用密码:YES)

在 Mac 上设置 Laravel php artisan migrate 错误:没有这样的文件或目录

SQL WHERE 列 = 一切