我正在开发一个文件存储应用程序,我使用 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 |
| .. | ........ | ........ |
+----+----------+----------+
您需要一个表来存储有关与谁共享哪些文件的信息。在我的示例数据中,您会看到 bob 与 mary 和 jim 共享文件 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/