MySQL много таблиц или несколько таблиц - PullRequest
2 голосов
/ 14 июля 2011

Я создаю очень большой веб-сайт, в настоящее время он использует около 13 таблиц, и к тому времени, как это будет сделано, должно быть около 20.

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

Было бы эффективно / разумно хранить почти все в одной таблице?

Редактировать: Вот еще немного информации.Я строю социальную сеть, в которой могут оказаться тысячи пользователей.Кластер MySQL будет использоваться при запуске сайта, пока я тестирую его с помощью VPS для разработки, однако перед запуском все будет перенесено на выделенный сервер.Я почти ничего не знаю о NDB, так что это должно быть весело:)

Ответы [ 7 ]

1 голос
/ 14 июля 2011

Эта модель называется EAV (сущность-атрибут-значение)

Его можно использовать в некоторых сценариях, однако он менее эффективен из-за больших записей, большего числа или объединений и невозможности создания составных индексов для нескольких атрибутов.

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

0 голосов
/ 14 июля 2011

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

0 голосов
/ 14 июля 2011

Я думаю, что 20 таблиц в проекте не много. Я понимаю вашу точку зрения и интерес к использованию EAV, но я не думаю, что это необходимо. Я бы придерживался таблиц в 3NF с правильными отношениями FK и т. Д., И вы должны быть в порядке:)

0 голосов
/ 14 июля 2011

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

При использовании нескольких таблиц данные разбиваются на более мелкие наборы, а ресурсы, необходимые для запроса, сокращаются, а в качестве дополнительного бонуса его проще программировать!

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

Надеюсь, это поможет: -)

0 голосов
/ 14 июля 2011

Сначала я бы сказал, что 20 таблиц - это не много.

В целом (трудно сказать по ограниченной информации, которую вы предоставляете) модель ключ-значение не так эффективна в отношении скорости, хотя она может быть более эффективной в отношении пространства.

0 голосов
/ 14 июля 2011

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

вам не нужно думать о соединении разных таблиц ...

0 голосов
/ 14 июля 2011

Конечно, я не знаю слишком много о больших базах данных, но из того, что я видел, даже очень большие приложения хранят свои вещи в очень небольшом количестве таблиц (20 ГБ на таблицу).

Для меня, я бы предпочел иметь больше информации в 1 таблице, так как это означает, что данные не засорены повсюду, и что мне не нужно выполнять операции над несколькими таблицами. Хотя 1 таблица также означает беспорядок (обычно для меня каждый объект должен иметь свою таблицу, а объект - это то, что есть в логике приложения, например, класс User или класс BlogPost)

Полагаю, я пытаюсь сказать, что делай все, что имеет смысл. Не помещайте информацию об одном и том же в две разные таблицы и не помещайте информацию о двух вещах в одну таблицу. Палка с 1 таблицей описывает только определенный объект (это очень сложно объяснить, но если вы делаете объектно-ориентированный, вы должны понимать.)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...