php - 基于S3的文件存储应用程序的数据库设计

标签 php mysql database-design amazon-s3

我正在开发一个文件存储应用程序,我使用 PHP 和 MySQL 作为我的工具。我的用例是用户可以使用该应用与多个用户共享多个文件。发件人将通过电子邮件发送 URL,收件人必须单击链接并登录才能查看文件。因此,当用户共享文件时,我想在数据库中创建一个条目。

 id|filename|shared_with|shared_by|shared_on|shared_url|url_expiration

现在,以上是我目前想到的数据库结构。但在这种情况下,如果与多个用户共享同一个文件,我将不得不存储多个值,我认为这不是一个好方法。另外,存储逗号(,)分隔的值也不是一个好主意。

我考虑了像 Mongo DB 这样的文档数据库(只是因为 dropbox 使用它并且可以很好地处理键值对数据)。但由于 MySQL 可以处理相当数量的记录,并且 NOSQL 现在可以成为大数据的潜在解决方案,因此我不确定哪种方法是处理此用例的正确方法。

希望专家们能够给我一些启发。我使用 Amazon S3 来存储文件。

最佳答案

这是一个非常基本的设计,可以帮助您入门......

您需要一个表来存储您的文件信息:

files
    id              unsigned int(P)
    owner_id        unsigned int(F users.id)
    name            varchar(255)

+----+----------+----------+
| id | owner_id | name     |
+----+----------+----------+
|  1 |        1 | File A   |
|  2 |        1 | File B   |
|  3 |        1 | File C   |
|  4 |        2 | File 123 |
| .. | ........ | ........ |
+----+----------+----------+

您需要一个表来存储有关与谁共享哪些文件的信息。在我的示例数据中,您会看到 bobma​​ryjim 共享文件 A,然后他共享文件B玛丽

shares
    id              unsigned int(P)
    file_id         unsigned int(F files.id)
    shared_with     unsigned int(F user.id)
    shared          datetime
    url             varchar(255)
    url_expires     datetime

+----+---------+-------------+---------------------+-------+---------------------+
| id | file_id | shared_with | shared              | url   | url_expires         |
+----+---------+-------------+---------------------+-------+---------------------+
|  1 |       1 |           2 | 2014-01-06 08:00:00 | <url> | 2014-01-07 08:00:00 |
|  2 |       1 |           3 | 2014-01-06 08:00:00 | <url> | 2014-01-07 08:00:00 |
|  3 |       2 |           2 | 2014-01-06 08:15:32 | <url> | 2014-01-07 08:15:32 |
| .. | ....... | ........... | ................... | ..... | ................... |
+----+---------+-------------+---------------------+-------+---------------------+

最后,您需要一个表来存储用户信息。

users
    id              unsigned int(P)
    username        varchar(32)
    password        varbinary(255)
    ...

+----+----------+----------+-----+
| id | username | password | ... |
+----+----------+----------+-----+
|  1 | bob      | ******** | ... |
|  2 | mary     | ******** | ... |
|  3 | jim      | ******** | ... |
| .. | ........ | ........ | ... |
+----+----------+----------+-----+

关于php - 基于S3的文件存储应用程序的数据库设计,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20951609/

相关文章:

php - Mysql 选择不同表中的两列

mysql - Symfony2 多对多关系数据库结构

database-design - 关系阵营和 “real-world”数据库开发

php - 持久化在某个目录下

javascript - 如何在 html 表格中显示 php 响应的数据

mysql - 在 SQL 查询中添加 365 天或年 - MOODLE

php - 从数据透视表中检索数据

database-design - 数据库设计: multiple potential identifiers

php - 向数据库插入不需要的数据

php - floatval($moneyString) 返回 0