Недостатки полей подстановок в таблицах
Оригинал The Evils of Lookup Fields in Tables
Составители Arvin Meyer, Joan Wild
Перевел Александр Артамонов, ноябрь 2011
- Поле подстановки в таблице отображает подстановочное значение. Например, пользователь открывает таблицу в режиме просмотра и видит столбец с именами компаний, но на самом деле в таблице находится числовой столбец КодКомпании, а таблица соединена выражением SELECT со справочником компаний по этому коду.
- Любой запрос, который использует подобное поле подстановки, чтобы отсортировать его по имени компании, не сработает. И также не сработает запрос, который использует имя компании в этом поле в качестве параметра. Если пользователь создаст комбобокс, чтобы выбрать компанию, используя список значений, данные в таблице могут быть перезаписаны.
- При создании поля подстановки создается еще одно отношение между таблицами и с ним еще один набор индексов, таким образом заставляя базу данных распухать без необходимости.
- Если комбобокс, основанный на таком поле используется в форме и применяется фильтр, Аксесс при этом фильтр часто сохраняет; и при следующем вызове формы откроется диалоговое окно, требующее параметр (который не может быть предоставлен, вызывая таким образом ошибку).
- Отчеты, основанные на поле подстановки требуют комбобокс для отображения данных, замедляя таким образом его выполнение. Источник данных отчета может быть модифицирован для включения справочной таблицы, однако индекс (если только он не был создан на соответствующем отношении) может быть неоптимальным.
- Поля подстановки маскируют то, что в действительности происходит и скрывают хорошую реляционную методологию от пользователя.
- База данных не может быть должным образом переведена на более мощную СУБД или запрошена другой СУБД (без удаления всех полей подстановок), так как ни один другой движок кроме Jet-а их не использует и не понимает.
- Если используются стандартные аксессовские методы безопасности, разрешений на таблицы обычно не выдается, и вместо них для доступа к данным используются запросы RWOP (с правами владельца). В таком случае будут часто происходить ошибки доступа к определенной таблице, которая даже не используется в запросе (так как поле подстановки использует эту таблицу). В случае сложных или вложенных запросов потребуется какое-то время, чтобы отследить поле подстановки, которое вызывает ошибку (то есть, если вы до этого додумаетесь).