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

1
Truth is a person 2 Май 2021 в 18:52

1 ответ

Лучший ответ

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

  • Вы хотите иметь возможность написать запрос, который будет возвращать данные о любом городе или всех городах. Это просто, если данные находятся в одной таблице; сложно, если данные находятся в нескольких таблицах.
  • Вы хотите оптимизировать свои запросы, выбирая правильные индексы и типы данных, собирая статистику, дефрагментируя индексы и так далее. Зачем умножать работу на количество столов?
  • Отношения внешнего ключа должны быть должным образом объявлены. Вы не можете этого сделать, если внешний ключ может относиться к нескольким таблицам.
  • Множество маленьких таблиц приводит к множеству частично заполненных страниц данных, что только увеличивает базу данных и замедляет ее работу.

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

Ваша проблема, связанная с ограничением пользователей просматривать данные только в одном городе, может быть решена разными способами. Вероятно, наиболее распространенным является использование представлений.

1
Gordon Linoff 2 Май 2021 в 17:48