Индивидуальные очистные сооружения: К классу индивидуальных очистных сооружений относят сооружения, пропускная способность которых...
Архитектура электронного правительства: Единая архитектура – это методологический подход при создании системы управления государства, который строится...
Топ:
Марксистская теория происхождения государства: По мнению Маркса и Энгельса, в основе развития общества, происходящих в нем изменений лежит...
Методика измерений сопротивления растеканию тока анодного заземления: Анодный заземлитель (анод) – проводник, погруженный в электролитическую среду (грунт, раствор электролита) и подключенный к положительному...
Комплексной системы оценки состояния охраны труда на производственном объекте (КСОТ-П): Цели и задачи Комплексной системы оценки состояния охраны труда и определению факторов рисков по охране труда...
Интересное:
Принципы управления денежными потоками: одним из методов контроля за состоянием денежной наличности является...
Уполаживание и террасирование склонов: Если глубина оврага более 5 м необходимо устройство берм. Варианты использования оврагов для градостроительных целей...
Мероприятия для защиты от морозного пучения грунтов: Инженерная защита от морозного (криогенного) пучения грунтов необходима для легких малоэтажных зданий и других сооружений...
Дисциплины:
2017-07-31 | 229 |
5.00
из
|
Заказать работу |
|
|
Использование в описании абстрактной модели таких слов, как отслеживать, вычислять или других глаголов, портит ее внутреннюю сущность. Всегда применяйте только те атрибуты, которые описывают состояние. Этот подход примерно аналогичен тому, что был описан в разделе “Представляйте все существительные наборами”.
Программисты, пришедшие из мира процедурных языков, привыкли мыслить категориями действий. Они думают о сложении, тогда как программистам декларативных языков важна сумма. Они думают о процессах, а мы — о результатах.
Вам по-прежнему доступны “заглушки”
На одном из рисунков известного карикатуриста Сидни Харриса (Sydney Harris) изображены два математика перед доской, на которой посреди длинной цепочки сложных математических доказательств стоят слова. “А затем происходит чудо”. И математик-слушатель говорит математику-автору: “Вот этот шаг надо бы описать поподробнее”.
Аналогичный прием мы используем в процедурных языках программирования — вставляя “заглушку”, до поры до времени не зная, что делать в этом месте программы. Например, вы разрабатываете программу по расчету зарплаты для компании, которая имеет сложную систему выплаты премий. Она вам пока непонятна или не задана, и вы пишете процедуру-“заглушку”, которая возвращает константу или просто выдает сообщение о своем выполнении. Это позволит вам продолжить работу с теми фрагментами процедуры, которые вам ясны.
Указанное труднее осуществить в декларативных языках программирования. Модули процедурного языка не обременены жесткими связями, тогда как предложения и запросы оператора SELECT представляют собой монолитную единицу программного кода. В процедурных языках программирования вы без труда напишете код, предназначенный для тестирования модуля. Для конструкций SQL сделать это гораздо проблематичнее.
Вернемся к задаче выбора партнера по танцу. Я мог бы подойти к ее решению, предположив, что необходимо разделить кавалеров и дам на две отдельные группы. Но допустим, что я пока не знаю, как написать этот код. Поэтому я с помощью текстового редактора вставляю заглушку — псевдокод:
|
Заключенный в угловые кавычки псевдокод я позже заменю на совокупность табличных столбцов, подзапросы или что-нибудь другое. В данный момент они являются просто метками. Также я использую метку “??” для указания на взаимосвязь между кавалерами и дамами. Затем я могу перейти на следующий уровень вложения и заменить метку <чудо-парни> подзапросом следующего содержания:
(SELECT P1.name, <заглушка для парней> FROM People AS P1 WHERE P1.gender = 1) AS M1 (name, <заглушка для парней>)Такой же шаблон для подзапроса применим и к метке <чудо-девушки>. Я знаю, что теперь мне необходимо определиться с кодом для метки <заглушка для парней>. Первым делом я обращаю внимание на столбцы в таблице People. Единственным интересующим меня атрибутом в данной таблице является пол. Я устанавливаю значение для этого атрибута таю для кавалеров оно равно 1, для дам — 2.
Я пробую следующее:
Легко увидеть, что данный фрагмент представляет собой всего-навсего неловко замаскированный оператор объединения CROSS JOIN. Добавить, что ли, уточнение по именам?
SELECT M1.name AS male, F1.name AS female FROM (SELECT P1.name, P1.gender FROM People AS P1 WHERE P1.gender = 1) AS M1 (name, gender) FULL OUTER JOIN (SELECT P1.name, gender FROM People AS P1 WHERE P1.gender = 2) AS F1 (name, gender) ON M1.gender = 1 AND FLgender = 2 AND M1.name <= F1.name;Нет, не помогает. В результате мы хоть и получим результирующий набор меньшего размера, но в нем все еще будут повторяющиеся пары. В этой ситуации поможет некоторый опыт работы с SQL Обычный прием здесь — упорядочение пар при помощи самообъединения таблицы. Поскольку данный прием применим к любой таблице, для получения окончательного результата запроса мы можем использовать его как для кавалеров, так и для дам.
|
|
|
Опора деревянной одностоечной и способы укрепление угловых опор: Опоры ВЛ - конструкции, предназначенные для поддерживания проводов на необходимой высоте над землей, водой...
Типы сооружений для обработки осадков: Септиками называются сооружения, в которых одновременно происходят осветление сточной жидкости...
Индивидуальные и групповые автопоилки: для животных. Схемы и конструкции...
Наброски и зарисовки растений, плодов, цветов: Освоить конструктивное построение структуры дерева через зарисовки отдельных деревьев, группы деревьев...
© cyberpedia.su 2017-2024 - Не является автором материалов. Исключительное право сохранено за автором текста.
Если вы не хотите, чтобы данный материал был у нас на сайте, перейдите по ссылке: Нарушение авторских прав. Мы поможем в написании вашей работы!