我有很多類似於'消息','評論','文章','評論'等信息,存儲在我的數據庫的不同表格中。單個表格爲不同類型的信息提供報告
我想爲它們中的每一個做一個「報告」功能,但我不想超載數據庫並限制結果工作量。
所以我想知道什麼是一個好的數據庫設計,以保持所有這些用戶報告只有一個數據庫。
由於提前, 塞巴斯蒂安
編輯:通過報告,我的意思是報告虐待像種族主義,暴力......在消息或評論,...
我有很多類似於'消息','評論','文章','評論'等信息,存儲在我的數據庫的不同表格中。單個表格爲不同類型的信息提供報告
我想爲它們中的每一個做一個「報告」功能,但我不想超載數據庫並限制結果工作量。
所以我想知道什麼是一個好的數據庫設計,以保持所有這些用戶報告只有一個數據庫。
由於提前, 塞巴斯蒂安
編輯:通過報告,我的意思是報告虐待像種族主義,暴力......在消息或評論,...
我想你的意思是你想要保留所有這些用戶報告(不是在一個數據庫中),只使用一個表或至少少量的表。
可能的解決辦法:
添加一個新Information
表將充當留言,評論,文章,評論等的超類型的表(這將是子類型):
Information
-----------
InformationId
PRIMARY KEY (InformationId)
在Message
表中添加一個新列InformationId
這是一個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
如果你的數據庫是比較小的我只會即時處理報告,而不是將其保存在數據庫中。
如果您仍然希望將報告保存在數據庫中,並且絕對需要將其保存在一張表中,那麼我會以XML或JSON等格式序列化報告數據,並將其保存在一個大的TEXT或BLOB字段中。所以你的表格將有兩列:report_id和report_data。
是的另一種選擇是使用一些OLAP解決方案/報告引擎來存儲您的報告(或部分報告數據),並保持標準化數據庫的清潔和乾淨。
感謝您的答覆。這就是我想的,但現在,如果我想選擇所有報告的項目及其相關數據,該怎麼辦?我必須爲每個「信息」表進行JOIN;對演出來說不是太糟糕了嗎? –
不,我不這麼認爲。你可能會有一個子查詢的'UNION'(所有的''報告'和每個子類型tbales之間都有'JOIN')。或者有一堆「LEFT」連接到子類型表的查詢。 –