база данных, таблица для каждого пользователя или большая таблица? - PullRequest
0 голосов
/ 17 сентября 2018

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

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

Другой пример, информационная система ресторана отслеживает меню всех ресторанов (скажем, в паре [foodname, price]), поскольку в каждом ресторане разное количество блюд, вы не можете поместить каждое меню в один ряд, вы можете только составьте огромную таблицу со строками [имя, цена, ресторан]. Но есть много ресторанов, поэтому, когда пользователю нужно меню определенного ресторана, вам нужно просмотреть данные всех ресторанов, что явно неэффективно.

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

Ответы [ 2 ]

0 голосов
/ 17 сентября 2018

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

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

Как только индексы будут созданы, все ваши примеры сценариев станут простыми и эффективными запросами.

0 голосов
/ 17 сентября 2018

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

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

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

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