あなたは、1つのテーブルまたは少なくとも少数のテーブルを使って、これらのユーザーレポートを(1つのDBではなく)保持したいと思うでしょう。
考えられる解決策:
Information
-----------
InformationId
PRIMARY KEY (InformationId)
:
メッセージ、コメント、記事、レビュー、(サブタイプになります)などのテーブルのスーパータイプとして動作する新しいInformation
テーブルを追加します。 Information
にFOREIGN 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
感謝を。それは私が考えていたものですが、報告されたアイテムとその関連データをすべて選択したいのですが?私は各 "情報"テーブルのJOINを作成する必要があります。パフォーマンスにはそれほど悪くないですか? –
いいえ、私はそうは思わない。サブクエリの 'UNION'(おそらく、' Report'とサブタイプtbalesのそれぞれの間に 'JOIN'があります)があります。または、サブツリーのテーブルに 'LEFT'の束を含むクエリが結合されます。 –