Эффективность базы данных - таблица для каждого пользователя и таблица пользователей
Для веб-сайта, имеющего пользователей. Каждый пользователь имеет возможность создавать любое количество, мы будем называть его "сообщениями":
Эффективность - лучше ли создавать одну таблицу для всех сообщений, сохраняя идентификатор пользователя, создавшего сообщение, для каждого сообщения - ИЛИ создавая другую отдельную таблицу для каждого пользователя и размещения там только сообщений, созданных этим пользователем?
Ответы
Ответ 1
Макет базы данных не должен изменяться при добавлении к нему большего количества данных, поэтому пользовательские данные должны обязательно находиться в одной таблице.
также:
-
Наличие нескольких таблиц означает, что вам нужно динамически создавать запросы.
-
Таблица кэшированных запросов для одной таблицы не будет использоваться для каких-либо других таблиц.
-
Наличие большого количества данных в одной таблице не сильно влияет на производительность, но имеет много таблиц.
-
Если вы хотите добавить индекс в таблицу, чтобы быстрее делать запросы, гораздо проще сделать это в одной таблице.
Ответ 2
Хорошо ответить на конкретный вопрос: с точки зрения эффективности запросов всегда будет лучше иметь небольшие таблицы, поэтому таблица на пользователя, вероятно, будет наиболее эффективной.
Однако, если у вас много сообщений и пользователей, это вряд ли имеет значение. Даже с миллионами строк вы получите хорошую производительность с хорошо размещенным индексом.
Я бы настоятельно советовал против стратегии table-per-user, потому что это добавляет много сложности вашему решению. Как бы вы запросили, когда вам нужно найти, скажем, пользователей, опубликованных по теме в течение года?
Оптимизируйте, когда вам нужно. Не потому, что вы думаете/боитесь, что что-то будет медленным. (И даже если вам нужно оптимизировать, будут более простые варианты, чем таблица за пользователя)
Ответ 3
Схемы с различным количеством таблиц, как правило, плохие. Используйте одну таблицу для своих сообщений.
Ответ 4
Если производительность является проблемой, вы должны узнать о индексах базы данных. Хотя индексы не являются частью стандарта SQL, почти все базы данных поддерживают их, чтобы повысить производительность.
Я рекомендую вам создать единую таблицу для всех пользователей, а затем добавить индексы в эту таблицу, чтобы повысить производительность поиска. Например, вы можете добавить индекс в столбец user
, чтобы вы могли быстро найти все сообщения для данного пользователя. Вы также можете рассмотреть возможность добавления других индексов в зависимости от требований вашего приложения.
Ответ 5
Ваше первое предложение о наличии единственной user
и одной таблицы post
- это стандартный подход.
В настоящий момент сообщения могут быть единственной пользовательской функцией на вашем сайте, но представьте, что в будущем может потребоваться поддержка для пользователей, имеющих сообщения, предпочтения и т.д. Теперь ваш отдельный подход к каждому пользователю к взрыву в количестве таблиц, которые вам нужно создать.