单独的表或数据透视表(或两者)

时间:2013-09-23 15:50:17

标签: mysql database database-design relational-database

我网站的用户可以上传文件。在question的帮助下,我提出了两种用于建模文件状态的设计。

示例状态为 - 已删除,待处理,已禁止,已上传

设计A - 单独的表

文件 - file_id(pk)| user_id(fk)| FILE_NAME

禁止文件 - file_id(fk)| ban_reason | admin_user |时间

已删除的文件 - file_id(fk)| perm_delete |时间| DELETED_BY

待处理文件 - file_id(fk)| start_time | waiting_for


设计B - 枢轴表&单独的信息表(两者)

文件 - file_id(pk)| user_id(fk)| FILE_NAME

状态 - status_id(pk)status_text

文件状态 - file_id(fk)| status_id(fk)| info_id(fk)< - 这链接到另一个表中存储有关此状态信息的记录,例如(ban_reason,admin_user,time)

禁止信息 - info_id(fk)| ban_reason | admin_user |时间

已删除信息 - info_id(fk)| perm_delete |时间| DELETED_BY

待定信息 - info_id(fk)| start_time | waiting_for


我对设计A的主要关注是,在选择文件时,我必须连接几个表来检查它们是否被禁止等。设计B旨在防止需要执行连接,因为我只会需要加入一个表格。

您会推荐哪种设计?

设计A的选择查询是否太慢?

1 个答案:

答案 0 :(得分:0)

如果您担心性能,可以在文件表中包含一个名为active的BIT列。 1表示它是活动的,0表示它不是。这可以让你找到只有一个表的所有活动文件,但是你会有一些开销来维护它。这与设计A相吻合。