项目状态关系数据库设计

时间:2013-09-17 08:23:27

标签: mysql database-design relational-database

有问题的项目可以是任何内容,在我的情况下,它们是用户上传的文件。

我有下表:

Files table -  file_id (pk), user_id (fk), file_name

如何存储每个文件的禁止状态?

我想过有一个banned_files表,但是用户也可以删除文件,禁用文件和文件可以等待。这意味着每个状态的表格,这听起来不是一个好主意。

更新#1

文件应该能够具有多个状态,例如,文件可以被禁止并且也可以被删除。因此,如果用户取消删除他们的文件,它仍然会被禁止。

更新#2

当文件被禁止时,需要记录禁令的原因。我的理由如下表所示:

Reasons table -  reason_id (pk), reason_text

2 个答案:

答案 0 :(得分:2)

创建一个可能状态的表,以及它与Files表之间的交集表。如果文件通过交集表连接到该文件,则该文件具有特定状态。

答案 1 :(得分:2)

这样的事情可行:

files
    id              unsigned int(P)
    user_id         unsigned int(F users.id)
    path            varchar(200)

files_statuses
    id              unsigned int(P)
    status_id       unsigned int(F statuses.id)
    reason_id       unsigned int(F reasons.id) ALLOW NULL, DEFAULT NULL

reasons
    id              unsigned int(P)
    description     varchar(100) // Offensive material, etc.

statuses
    id              unsigned int(P)
    description     varchar(50) // Banned, Deleted, etc.