В моей базе данных две таблицы, одна содержит список пользователей, другая - список ролей. Каждый пользователь будет принадлежать к одной или нескольким ролям, и, конечно, в каждой роли будет несколько пользователей.
Я нашел два способа связать информацию. Первый - добавить третью таблицу, которая содержит идентификаторы из обеих таблиц. Простое объединение вернет всех пользователей, которые принадлежат к роли, или все роли, к которым принадлежит пользователь. Однако по мере роста базы данных наборы данных, возвращаемые этими простыми запросами, будут расти в геометрической прогрессии.
Второй метод заключается в добавлении столбца в таблицу пользователей, в которой хранится список ролей с разделителями. Это устранит необходимость в третьей таблице связывания, которая может оказать положительное влияние на рост базы данных. Недостатком является то, что в SQL нет возможности использовать списки с разделителями. Единственный способ обработки этой информации, который я нашел, - это использование временной таблицы и пользовательской функции.
При просмотре моих планов выполнения, событие "сканирование таблицы" - это то, которое занимает больше всего ресурсов. Имеет смысл, что исключение таблицы из уравнения ускорит процесс. Функция занимает менее 1% ресурсов.
Эти тесты проводились для базы данных, содержащей менее 20 записей. По мере увеличения размера базы данных сканирование таблиц займет больше времени, поэтому, возможно, ограничение их является лучшим выбором.
Если использование списка с разделителями - хороший способ, почему никто этого не делает?
Пожалуйста, скажите мне, какой метод вы предпочитаете (даже если он отличается от моих двух) и почему.
Спасибо.