2013-09-04 1 views
1

У меня есть база данных со столами для видео/пользователей/сообщений.Таблицы с отношением 1-1 (информация и статистика)

видео таблица содержит информацию о видео

  • ID
  • название
  • описание
  • владелец
  • ...

Пучок статистики (которые обновляются живут)

  • просмотры
  • позитивных голоса
  • отрицательных голоса
  • ...

А также куча расчетных значений (которые обновляются один раз в день или неделю)

  • calculate_votes
  • is_popular
  • репутации
  • ...

Я в конечном итоге с довольно большими столами. Разве это могло бы разделить его? (table: videos, videos_statistic)
Который в итоге оказался бы отношением 1-1.

Я никогда не был поклонником отношения 1-1, существуют ли какие-либо «правила», когда говорят, что это нормально?

+0

Что вы подразумеваете под огромными огромными столами? Если вы имеете в виду количество столбцов, это не должно быть ограничением, если вам нужно 100 колонок, вам нужно 100 кумов. Если вы имеете в виду память, то в конечном итоге вы будете использовать больше памяти с несколькими таблицами. Я не вижу причин, по которым одна большая таблица, индексированная должным образом, была бы хуже, чем несколько таблиц. И несколько таблиц приводят к дополнительным проблемам обслуживания. У вас действительно есть проблемы с производительностью? – GarethD

+0

Для такого использования (некоторые столбцы в основном стабильны, некоторые из них обновляются очень часто, а некоторые редко) я бы выбрал разделение таблицы на 3. –

+1

Это также зависит от того, как используются ваши статистические данные. Вы можете полностью перенести свою статистику в среду OLAP. – GarethD

ответ

2

Ну, я бы сохранить статистику в отдельной таблице (1 ко многим даты на основе, так что не 1 к 1)

Так таблица статистики может иметь столбцы

  • VideoID
  • StatDate
  • Просмотров
  • PositiveVotes
  • Etc.

Это позволит вам сохранить историю значений, которые могут быть использованы в отчетах позже, показывая средние, тенденция и т.д.

+0

У меня нет истории, отличной точки. Это поможет мне разобраться. –

+0

Также помните, чтобы сохранить расчетную/измененную дату, так как это может пригодиться позже, если значения должны быть обновлены, и вам нужно проверить, нужно ли пересчитывать. –

1

Я также хотел бы сохранить статистику в отдельной таблице два причин (даже если ее 1 -1):

1: обновление тонкой таблицы будет проще с точки зрения ресурсов по сравнению с более широкой таблицей. 2: Извлечение будет также быстрее, основываясь на виде отчетов. Если данные используются для отчетов BI.

Учитывая атрибуты, указанные в вашем вопросе:

идентификатор название описание владелец

Эти атрибуты меняются очень редко раз в системе. Там, где таблицы статистики обновляются регулярно. Так, например, Astander упомянул, если вы хотите сохранить статистику на другом зерне на уровне даты, а затем не изменяющиеся атрибуты не нужно снова хранить снова за каждый день.

Надеюсь, это поможет.

Смежные вопросы