История развития пистолетов-пулеметов: Предпосылкой для возникновения пистолетов-пулеметов послужила давняя тенденция тяготения винтовок...
Таксономические единицы (категории) растений: Каждая система классификации состоит из определённых соподчиненных друг другу...
Топ:
Установка замедленного коксования: Чем выше температура и ниже давление, тем место разрыва углеродной цепи всё больше смещается к её концу и значительно возрастает...
Проблема типологии научных революций: Глобальные научные революции и типы научной рациональности...
Когда производится ограждение поезда, остановившегося на перегоне: Во всех случаях немедленно должно быть ограждено место препятствия для движения поездов на смежном пути двухпутного...
Интересное:
Наиболее распространенные виды рака: Раковая опухоль — это самостоятельное новообразование, которое может возникнуть и от повышенного давления...
Финансовый рынок и его значение в управлении денежными потоками на современном этапе: любому предприятию для расширения производства и увеличения прибыли нужны...
Что нужно делать при лейкемии: Прежде всего, необходимо выяснить, не страдаете ли вы каким-либо душевным недугом...
Дисциплины:
|
из
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 Обычный прием здесь — упорядочение пар при помощи самообъединения таблицы. Поскольку данный прием применим к любой таблице, для получения окончательного результата запроса мы можем использовать его как для кавалеров, так и для дам.
SELECT M1.name AS male, F1.name AS female FROM (SELECT P1.name, COUNT (P2.name) FROM People AS P1, People AS P2 WHERE P2.name <= P1.name AND P1.gender = 1 AND P2.gender = 1 GROUP BY PLname) AS M1 (name, rank) FULL OUTER JOIN (SELECT PLname, COUNT (P2.name) FROM People AS P1, People AS P2 WHERE P2.name <= P1.name AND P1.gender = 2 AND P2.gender = 2 GROUP BY PLname) AS F1 (name, rank) ON M1.rank = F1.rank;|
|
|
Типы оградительных сооружений в морском порту: По расположению оградительных сооружений в плане различают волноломы, обе оконечности...
Индивидуальные и групповые автопоилки: для животных. Схемы и конструкции...
Эмиссия газов от очистных сооружений канализации: В последние годы внимание мирового сообщества сосредоточено на экологических проблемах...
Поперечные профили набережных и береговой полосы: На городских территориях берегоукрепление проектируют с учетом технических и экономических требований, но особое значение придают эстетическим...
© cyberpedia.su 2017-2026 - Не является автором материалов. Исключительное право сохранено за автором текста.
Если вы не хотите, чтобы данный материал был у нас на сайте, перейдите по ссылке: Нарушение авторских прав. Мы поможем в написании вашей работы!