На главную страницу
Характерные ошибки при решении упражнений.
Задача 27
Моисеенко С.И.
Найдите средний размер диска ПК каждого из тех производителей, которые выпускают
и принтеры. Вывести: maker, средний размер HD.
Ошибка, которую здесь допускают, связана с недопониманием специфики предметной
области. Я уже где-то об этом писал, но поскольку периодически получаю письма с
просьбой объяснить ошибку в решении задачи, еще раз изложу трактовку базы
данных "Компьютеры".
В таблице Product хранится информация обо всех известных производителях
компьютерной техники. По крайней мере, тех, с кем взаимодействует наша
вымышленная фирма. Остальные таблицы - PC, Laptop и Printer - содержат
имеющиеся в наличии модели соответственно ПК, ПК-блокнотов и принтеров
(например, в магазине). Здесь одна и та же модель может повторяться несколько
раз, причем даже с идентичными характеристиками, т.к. все эти таблицы содержат
синтетический первичный ключ - code. Связи "один-ко-многим" по модели допускают
отсутствие той или иной модели в наличии, хотя она может присутствовать в
таблице Product, т.к. имеется производитель, который ее выпускает.
Итак, когда речь идет, например, о производителях принтеров как в этой задаче,
то это те юридические лица в таблице Product, у которых в поле type находится
значение 'printer'. Проще говоря,
SELECT DISTINCT maker FROM Product WHERE type = 'printer'
Ошибка же состоит в том, что производителя принтеров определяют таким образом:
SELECT DISTINCT (Product.maker) FROM Product INNER JOIN
Printer ON
Product.model = Printer.model
Таким образом, ограничивается число возможных производителей принтеров только
теми, чьи модели (принтеров) имеются в наличии.
Аналогичная ошибка допускается и в задаче 28, которая звучит так:
Найдите средний размер диска ПК (одно значение для всех) тех производителей,
которые выпускают и принтеры. Вывести: средний размер HD
Приведенные здесь примеры можно выполнить непосредственно на сайте, установив
флажок "Без проверки" на странице с упражнениями
на SELECT.
Перейти к решению
задачи #27
На главную страницу