Единая таблица для хранения отчетов по разным типам информации - PullRequest
1 голос
/ 06 декабря 2011

У меня много разных видов информации, таких как «сообщения», «комментарии», «статьи», «обзоры», ... хранящихся в разных таблицах в моей БД.

Я бы хотел сделать 'функциональность отчетов для каждого из них, но я не хочу перегружать БД и ограничивать объем получаемой работы.

Поэтому я хотел бы знать, что было бы хорошим дизайном БД для хранения всех этих пользовательских отчетов.только в одной БД.

Заранее спасибо, Себастьян

РЕДАКТИРОВАТЬ: Под отчетом я имею в виду сообщения о злоупотреблениях, таких как расизм, насилие, ... в сообщениях или комментариях, ...

Ответы [ 2 ]

1 голос
/ 08 декабря 2011

Я предполагаю, что вы хотите сохранить все эти пользовательские отчеты (не в одной БД, а), используя только одну таблицу или хотя бы небольшое количество таблиц.

Возможное решение:

Добавьте новую таблицу 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
0 голосов
/ 06 декабря 2011

Если ваша база данных относительно мала, я бы просто обрабатывал отчеты на лету, а не сохранял их в БД.

Если вы все еще хотите сохранить свои отчеты в БД и вам абсолютно необходимо хранить их только в одной таблице, я бы сериализовал данные отчета в некотором формате, таком как XML или JSON, и оставил бы их в большом поле TEXT или BLOB. Таким образом, ваша таблица будет иметь два столбца: report_id и report_data.

Да, другой вариант - использовать какой-либо OLAP-решение / механизм отчетов, который будет хранить ваши отчеты (или частичные данные отчетов) и оставлять вашу нормализованную БД в хорошем и чистом состоянии.

...