单个表,用于保存不同类型信息的报告

时间:2011-12-05 20:15:59

标签: database database-design reporting

我有很多信息,例如'留言','评论','文章','评论',...存储在我的数据库中的不同表格中。

我想为每个人制作一个'报告'功能,但我不希望重载数据库并限制产生的工作量。

所以我想知道什么是一个好的数据库设计,只将所有这些用户报告保存在一个数据库中。

提前致谢, 塞巴斯蒂安

编辑:通过报告,我的意思是报告滥用,如种族主义,暴力,...在消息或评论中,......

2 个答案:

答案 0 :(得分:1)

我猜你的意思是你想保留所有这些用户报告(不是在一个数据库中),而只使用一个表或至少少量的表。

可能的解决方案:

添加一个新的Information表,它将作为Message,Comment,Article,Review等表的子类型(将是子类型):

Information
-----------
InformationId
PRIMARY KEY (InformationId)

InformationId表中添加MessageFOREIGN KEY的新列Information

Message
-------
MessageId                  --- no changes here
... other data             --- or here

InformationId                        --- one additional column

PRIMARY KEY (MessageId)    --- no changes here
...                        --- or here

UNIQUE KEY (InformationId)           --- so every message, article, comment 
FOREIGN KEY InformationId            --- or review can be identified
  REFERENCES Information (InformationId)

对所有其他“信息”表执行相同操作,例如评论,文章,评论等。

然后添加Report表:

Report
------
ReportId                     
InformationId              --- which message, article, etc is reported
ReporterId                 --- who reports it
ReportType                 --- what type of abuse it is (racist, etc.)
DateOfReport 
Explanation
PRIMARY KEY (ReportId)      
FOREIGN KEY InformationId
  REFERENCES Information (InformationId)
FOREIGN KEY ReporterId
  REFERENCES Person (PersonId)              --- the User table

答案 1 :(得分:0)

如果您的数据库相对较小,我会直接处理报告,而不是将它们保存在数据库中。

如果您仍希望将报表保留在数据库中,并且您只需要将其保存在一个表中,我会以某种格式(如XML或JSON)序列化报表数据,并将其保存在一个大的TEXT或BLOB字段中。因此,您的表格将包含两列:report_id和report_data。

是的另一个选择是使用一些OLAP解决方案/报告引擎来存储您的报告(或部分报告数据),并使您的规范化数据库保持良好和干净。