2011-12-05 42 views
1

我有很多類似於'消息','評論','文章','評論'等信息,存儲在我的數據庫的不同表格中。單個表格爲不同類型的信息提供報告

我想爲它們中的每一個做一個「報告」功能,但我不想超載數據庫並限制結果工作量。

所以我想知道什麼是一個好的數據庫設計,以保持所有這些用戶報告只有一個數據庫。

由於提前, 塞巴斯蒂安

編輯:通過報告,我的意思是報告虐待像種族主義,暴力......在消息或評論,...

回答

1

我想你的意思是你想要保留所有這些用戶報告(不是在一個數據庫中),只使用一個表或至少少量的表。

可能的解決辦法:

添加一個新Information表將充當留言,評論,文章,評論等的超類型的表(這將是子類型):

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

Message表中添加一個新列InformationId這是一個FOREIGN KEYInformation

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 
+0

感謝您的答覆。這就是我想的,但現在,如果我想選擇所有報告的項目及其相關數據,該怎麼辦?我必須爲每個「信息」表進行JOIN;對演出來說不是太糟糕了嗎? –

+0

不,我不這麼認爲。你可能會有一個子查詢的'UNION'(所有的''報告'和每個子類型tbales之間都有'JOIN')。或者有一堆「LEFT」連接到子類型表的查詢。 –

0

如果你的數據庫是比較小的我只會即時處理報告,而不是將其保存在數據庫中。

如果您仍然希望將報告保存在數據庫中,並且絕對需要將其保存在一張表中,那麼我會以XML或JSON等格式序列化報告數據,並將其保存在一個大的TEXT或BLOB字段中。所以你的表格將有兩列:report_id和report_data。

是的另一種選擇是使用一些OLAP解決方案/報告引擎來存儲您的報告(或部分報告數據),並保持標準化數據庫的清潔和乾淨。