7. Табличная модель прикладного решения
#9

Готовишься к экзамену?

Полнофункциональный тренажер @bot_1cnik_bot с полноценным обучением, режимом экзамена и подробной статистикой.

Перейти в бота

При соединении таблиц-источников данных в конструкторе запросов можно:

Назначить необходимое количество соединений с указанием необходимого количества условий связи, причем эти условия могут быть как простые, так и произвольные
Правильно: В конструкторе можно добавлять столько связей, сколько требуется логикой запроса, а условия связи задавать не только как простые сравнения полей, но и как выражения с функциями, параметрами и дополнительными проверками. Также допустимо указывать несколько условий для одного соединения - фактически они объединяются логическим «И».
Назначить соединение без указания условия связи
Неправильно: Соединение в конструкторе предполагает наличие условия «ПО ...», иначе оно не определяет, какие строки сопоставлять между таблицами. Если условия связи нет, это уже не настройка соединения на вкладке «Связи», а фактически декартово произведение таблиц, которое обычно приводит к «раздуванию» результата и не считается корректно заданным соединением.
Назначить соединение с указанием условия связи, причем это условие может быть только простое
Неправильно: Условие связи может включать не только сравнение двух полей, но и дополнительные части: проверки на NULL, сравнение с параметрами, выражения с функциями, условия по периоду, по иерархии и т. п. То есть конструктор не ограничивает разработчика только «простыми» условиями.
Назначить соединение с указанием условия связи, причем это условие может быть только одно
Неправильно: Для одного соединения можно задать несколько условий: например, связать таблицы одновременно по номенклатуре и по складу, а также добавить ограничение по дате/периоду. В конструкторе это оформляется несколькими строками условий, которые работают совместно.

Пояснение

В конструкторе запросов связи между таблицами задаются на вкладке «Связи»: вы выбираете Таблица1 и Таблица2, тип соединения (внутреннее/левое/полное и т. п.) и заполняете условие «ПО ...». Ограничений «только одно соединение» или «только одно условие» нет: вы можете добавлять сколько угодно соединений и сколько угодно условий для каждого соединения. Практический пример (несколько условий связи): чтобы сопоставить остатки и цены, часто связывают таблицы сразу по двум ключам: Номенклатура = Номенклатура И Склад = Склад. Это уменьшает риск получить неверные совпадения и повышает точность результата. Практический пример (произвольное/сложное условие): при левом соединении можно добавить в условие связи ограничение по периоду, например «ПО Товар = Товар И Дата <= &ДатаОтчета», или использовать функции/проверки на пустые значения, чтобы корректно сопоставлять строки при неполных данных. Лучшие практики: (1) держите ключевые условия сопоставления именно в «Связях», а не в общих «Условиях», особенно при левом соединении - фильтр по полям правой таблицы, перенесенный в общие условия, может фактически превратить левое соединение во внутреннее; (2) связывайте таблицы по минимально необходимым ключам (обычно несколько полей), чтобы избежать «размножения» строк; (3) сложные условия лучше формулировать так, чтобы они были понятны и проверяемы - при необходимости редактируйте выражение вручную.