我有很多信息,例如'留言','评论','文章','评论',...存储在我的数据库中的不同表格中。
我想为每个人制作一个'报告'功能,但我不希望重载数据库并限制产生的工作量。
所以我想知道什么是一个好的数据库设计,只将所有这些用户报告保存在一个数据库中。
提前致谢, 塞巴斯蒂安
编辑:通过报告,我的意思是报告滥用,如种族主义,暴力,...在消息或评论中,......答案 0 :(得分:1)
我猜你的意思是你想保留所有这些用户报告(不是在一个数据库中),而只使用一个表或至少少量的表。
可能的解决方案:
添加一个新的Information
表,它将作为Message,Comment,Article,Review等表的子类型(将是子类型):
Information
-----------
InformationId
PRIMARY KEY (InformationId)
在InformationId
表中添加Message
到FOREIGN 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解决方案/报告引擎来存储您的报告(或部分报告数据),并使您的规范化数据库保持良好和干净。