2011-12-05 14 views
1

私は、「メッセージ」、「コメント」、「記事」、「レビュー」などの多くの種類の情報をMy DBの異なるテーブルに保存しています。異なる種類の情報のレポートを保持する1つのテーブル

私はそれらのそれぞれのための 'レポート' functionnalityを作りたいと思いますが、私はDBを過負荷にして、結果として得られる仕事の量を制限したくありません。

私はこれらのユーザーレポートを1つのDBだけに保存​​するには、どのようなDB設計が良いか知りたいと思います。事前に

おかげで、 セバスチャン・

EDIT:レポートでは、私は人種差別、暴力、...メッセージやコメントでは、などの虐待を報告意味...

答えて

1

あなたは、1つのテーブルまたは少なくとも少数のテーブルを使って、これらのユーザーレポートを(1つのDBではなく)保持したいと思うでしょう。

考えられる解決策:

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

メッセージ、コメント、記事、レビュー、(サブタイプになります)などのテーブルのスーパータイプとして動作する新しいInformationテーブルを追加します。 InformationFOREIGN KEYあるMessageテーブルに新しい列を追加しますInformationId

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'(おそらく、' Report'とサブタイプtbalesのそれぞれの間に 'JOIN'があります)があります。または、サブツリーのテーブルに 'LEFT'の束を含むクエリが結合されます。 –

0

データベースが比較的小さい場合にはI DBに永続させるのではなく、オンザフライでレポートを処理するだけです。

レポートをDBに保存しておく必要があり、それを1つのテーブルに保存する必要がある場合は、XMLやJSONなどの形式でレポートデータをシリアル化し、大きなTEXTまたはBLOBフィールドに保持します。したがって、テーブルには2つの列、report_idとreport_dataがあります。

はい別のオプションは、レポート(または部分的なレポートデータ)を保存し、正規化されたDBをきれいにしておくOLAPソリューション/レポートエンジンを使用することです。

関連する問題