Санкт-Петербургский государственный университет -------------------------------------
БАЗЫ ДАННЫХ Методическое пособие
...
32 downloads
134 Views
679KB Size
Report
This content was uploaded by our users and we assume good faith they have the permission to share this book. If you own the copyright to this book and it is wrongfully on our website, we offer a simple DMCA procedure to remove your content from our site. Start by pressing the button below!
Report copyright / DMCA form
Санкт-Петербургский государственный университет -------------------------------------
БАЗЫ ДАННЫХ Методическое пособие
Составитель Д.А.Пляко
Введение Задачи, связанные с хранением и обработкой информации, совсем недавно были уделом узких специалистов по информатике. В настоящее время с подобными задачами сталкивается каждый, кто в своей работе в той или иной мере использует компьютер. Существует множество программных продуктов, предназначенных для решения проблем построения и использования баз данных, которые ориентированы на малоподготовленных пользователей персональных компьютеров. Однако, как показывает практика, более-менее полноценное использование таких программных продуктов требует достаточно хорошего понимания основных понятий и концепций теории баз данных. Видимо, именно потому курс «Базы данных» введен в учебный план ряда гуманитарных специальностей. Данное методическое пособие построено на основе подобного курса, читаемого автором на восточном факультете СанктПетербургского государственного университета.
§ 1. Основные понятия Термин «база данных» в настоящее время применяется, когда речь идет о задаче хранения и переработке информации с помощью компьютера. Однако, не всякую информацию, хранимую в компьютере можно назвать базой данных (БД). Под этим термином обычно понимают совокупность информации, организованную определенным образом и объединенную в одно целое по некоторому признаку. Чтобы не углубляться пока в детали, связанные с правилами хранения информации в памяти компьютеров, поясним сформулированное определение базы данных на «бытовом» примере. Предположим, что некто хранит информацию о своих знакомых (например: фамилию, имя, дату рождения и номер телефона) где придется: на обрывках бумаги, на полях книг, в записной книжке на наугад открытой странице и т.п. Понятно, что пользоваться такой информацией весьма трудно (если вообще возможно). Альтернативой вышеописанной манере «хранения» информации является способ, используемый при составлении телефонных справочников, где данные строго упорядочены, и потому можно быстро найти телефон нужного абонента. В компьютере тоже можно хранить информацию безо всякой системы (по тому же принципу, как это делал вышеупомянутый «некто»), ее тогда тоже трудно будет использовать и такая совокупность информации не может претендовать на то, чтобы называться базой данных. Именно это обстоятельство и оговаривается в определении БД, когда подчеркивается, что информация должна быть «организована определенным образом». Конкретный способ организации базы данных определяется тем программным продуктом, который специально создается для обработки информации, объединенной в БД. Программные средства, предназначенные для указанной цели, называются «системами управления базами данных» (СУБД). Все СУБД выполняют более или менее одинаковый набор задач по обработке информации, хранящейся в базе данных. Среди них основными являются: ввод данных, коррекция данных, удаление ненужной информации, поиск требуемой
информации и отображение ее на экране дисплея (либо вывод на печатающее устройство). Различаются системы управления базами данных по разнообразным критериям (по быстродействию, по удобству работы с ними, по типу компьютеров, для которых эти СУБД разработаны и т.д.), но, прежде всего, СУБД классифицируются по способу организации информации в базе данных. В теории баз данных известно несколько таких способов, однако к настоящему времени особую популярность и распространение получил пожалуй самый простой из них, при котором информация в базе данных организуется в виде таблиц. Такие таблицы называются также «отношениями» (relation), а сами базы данных, организованные с помощью отношений (и соответствующие СУБД) получили название «реляционных». В дальнейшем мы будем рассматривать исключительно реляционные базы данных. Прежде всего, изучим подробнее то, как информация размещается в таблицах (отношениях) и какие типы данных можно хранить в таких таблицах.
§ 2. Табличная структура реляционных баз данных Таблица реляционной базы данных предназначена для хранения информации об объектах определенного вида. Такая таблица состоит из произвольного количества строк, причем в каждой строке хранится информация ровно об одном объекте. Строки такой таблицы называются также записями. Особо подчеркнем, что все строки таблицы имеют одинаковую структуру хранимой информации. Поясним сказанное на примере. Предположим, что все тот же «некто» решил хранить информацию о своих знакомых в виде таблицы реляционной БД. В этом случае, в каждой строке таблицы должна храниться информация ровно об одном знакомом нашего «некто». Так как информация эта состоит из отдельных «порций» (напомним: фамилия, имя, дата рождения, номер телефона), то строка таблицы состоит из отдельных разделов, называемых полями. «Порции» информации называются данными. Таким образом, каждому отдельному данному соответствует отдельное поле. Если «некто» решил, что в первой строке данные должны следовать в том, порядке, как указано выше в скобках, то в таком же порядке данные должны располагаться во всех остальных строках таблицы. Далее, «некто» может расположить в первом поле строки и фамилию, и имя, а может эти данные разместить в разных полях (в первом поле – фамилию, а во втором поле – имя), но какое бы решение из этих двух альтернатив он ни выбрал, оно должно быть одинаковым для всех записей. Допустим, что «некто» выбрал вариант, при котором фамилия и имя занимают только одно поле. Следующее решение, которое ему следует принять – это выбрать размер такого поля (т.е., сколько символов требуется, чтобы записать такое «сдвоенное» данное). Наверно уже понятно, что очередное требование реляционной БД состоит в том, что размер всех таких полей должен быть одинаков во всех строках таблицы. Отсюда следует, что размер первого поля нужно подбирать таким, чтобы в этом поле можно было разместить самое длинное данное (то есть, самое длинное сочетание фамилия+имя). Требование одинаковости всех атрибутов, относится и ко всем остальным полям записи. Поэтому таблицу реляционной БД можно представить схематически совершенно естественным образом («в виде таблицы»):
Таблица 1. Иванов Сидор Сидоров Петр Петров Иван Римский-Корсаков Николай . . .
13.01.1973 23.02.1978 08.03.1977 24.04.1844 2
1234567 2345678 3456789
Легко заметить, что таблица реляционной БД состоит из столбцов, содержащих однородную информацию об объектах. В нашем примере первый столбец содержит информацию о фамилии и имени (всех знакомых нашего «некто»), второй – о дате рождения, наконец, третий – сведения о телефонах. Следует отметить, что если количество строк в таблице может быть в принципе произвольным и обычно изменяется (увеличивается и/или уменьшается) в процессе работы с базой данных, то количество столбцов (иными словами, количество полей в строке) не может быть сколь угодно большим. Оно фиксируется в момент создания таблицы и его изменение – процесс более «болезненный», чем изменение количества записей. Более подробно об этом мы поговорим позже. Если требуется выбрать из таблицы какое-либо отдельное данное (например, телефон Сидорова), то необходимо указать строку и столбец, на пересечении которых находится требуемое данное. В таблицах реляционных БД для этой цели строки нумеруются, а каждому столбцу дается имя. Дополним Таблицу 1 именами столбцов:
Таблица 1а. Family Иванов Сидор Сидоров Петр Петров Иван Римский-Корсаков Николай . . .
Birthday 13.01.1973 23.02.1978 08.03.1977 24.04.1844
Phone 1234567 2345678 3456789
Теперь если требуется телефон Сидорова, то его следует выбрать из поля Phone второй строки, а день рождения Римского-Корсакова можно узнать в поле Birthday четвертой строки и т.д. Важной характеристикой данных, хранимых в БД, является их тип. Вернемся к нашему примеру. Данные из первого столбца Таблицы 1 относятся к символьному типу. К такому типу относится информация, которая записывается в виде последовательности произвольных символов (букв, цифр, знаков препинания и т.д.). Поскольку любая информация может быть представлена в виде последовательности символов, то символьный тип данных является самым общим из всех типов данных. В принципе, в структуре полей БД можно было бы обходиться только им одним, но такое решение сильно сузило бы возможности обработки данных. (Символьный тип данных часто называют также строковым, а сами данные – строками, но мы не будем использовать эту терминологию, чтобы не путать строки-данные со строками-записями таблицы). Характеристикой символьного поля является его размер. Следует подчеркнуть, что при определении размера необходимо учитывать все символы, участвующие в символьном данном. Например, в четвертой записи Таблицы 1 размер символьного данного из первого столбца равен 24, учитывая знак дефиса в фамилии, а также символ пробела, разделяющего фамилию и имя. Своеобразной платой за универсальность символьного типа данных является очень небольшой набор операций, которые допускаются при обработке таких данных. Таких операций только две: символьные данные можно сравнивать (в лексикографическом смысле) и несколько символьных полей можно объединить в одну последовательность символов путем их слияния (эта операция называется операцией конкатенации). Рассмотрим теперь третий столбец Таблицы 1. Данные этого столбца можно хранить (как и вообще любые данные) в символьном виде, но можно отнести их к числовому типу данных, поскольку номера телефонов обычно записываются в виде целых чисел. Какой бы ни был выбран тип для данных третьего столбца, внешний вид таблицы никак не изменится. Однако выбор числового типа, дает определенные выгоды: данные этого типа занимают меньше места при хранении в компьютере и при обработке таких данных можно использо3
вать все стандартные арифметические операции (над номерами телефонов, конечно, никакие арифметические операции обычно не используются, но в иных случаях подобное преимущество играет первостепенную роль). Отметим, что если необходимо номер телефона хранить вместе с кодом города, который принято записывать в скобках (например, (812) 1234567), то тогда данные третьего столбца нельзя отнести к числовому типу данных, и следует использовать символьный тип. Таким образом, числовой тип данных можно использовать только тогда, когда данные являются числами, записываемыми в одной из принятых форм (подробнее о формах представления числовых данных будет говориться ниже, при обсуждении конкретных СУБД). Во втором столбце Таблицы 1 помещена информация, которая относится к типу «календарная дата» (или просто «дата»). Все современные СУБД «поддерживают» в том или ином виде этот тип данных (т.е. позволяют вводит данные такого типа в базу данных и осуществлять над этими данными необходимые операции). Вновь следует отметить, что даты можно хранить как символьный тип данных, но если хранить этот вид информации как специальный тип «календарная дата», то СУБД автоматически будет контролировать вводимую информацию на корректность (например, СУБД не позволит ввести дату «31 июня» или «29 февраля» не високосного года и т.п.). Кроме того, все СУБД разрешают осуществлять над календарными датами некоторые полезные операции, например, можно добавить к какойнибудь дате целое число, в результате чего получается новая дата, которая «позже» первоначальной на это число дней; из одной даты можно «вычесть» другую, в результате получим число дней, разделяющих эти две даты. Конкретные примеры операций над датами будут приведены позже. Системы управления базами данных, как правило, допускают обработку еще некоторых других типов данных, но пока мы ограничимся рассмотрением вышеперечисленных трех основных типов, как наиболее употребительных. В заключение данного параграфа сформулируем основные сведения, относящиеся к построению таблицы реляционной базы данных. 1. Таблица состоит из строк и столбцов, причем количество столбцов ограничено и определяется при конструировании таблицы, а число строк – не ограничено (по крайней мере теоретически) и обычно изменяется при работе с таблицей. 2. Каждая строка содержит информацию ровно об одном объекте и состоит из отдельных разделов, называемых полями. «Порции» информации, хранящиеся в отдельном поле, называются данными. Полям строк дается имя, по которому можно обращаться к содержащимся в полях данным. 3. Все строки таблицы имеют идентичную структуру, т.е. состоят из одинакового количества полей, размещаемых в одинаковом порядке. 4. Каждый столбец (образующийся из одноименных полей всех записей) содержит данные одного определенного типа. Для каждого типа данных системой управления базой данных поддерживается определенный набор операций. Приемы и правила работы с данными, организованными в виде реляционной таблицы, рассмотрим на примере «электронной таблицы» Microsoft Excel.
§ 3. Работа с электронной таблицей Microsoft Excel Программный продукт Excel, разработанный фирмой Microsoft, не является системой управления базой данных в строгом смысле. Хотя информация в Excel хранится в табличном виде, но способ хранения информации во многом отступает от тех правил, которые сформулированы в конце предыдущего параграфа. По этой причине структуру хранения информации в Excel и сам программный продукт (что не вполне корректно) называют «электронной 4
таблицей». Тем не менее, знакомство с принципами работы с базами данных мы начнем на примере Excel, поскольку простота и наглядность работы с электронной таблицей позволит на первых порах обойти некоторые трудные для восприятия моменты. К тому же, если при разработке структуры для хранения информации соблюдать вышеупомянутые правила, то полученный фрагмент электронной таблицы в терминах Excel тоже называется базой данных и для работы с такой БД в Excel имеется целый набор встроенных средств. Поскольку нашей целью является рассмотрение именно этих средств, то прочие возможности Excel будут изложены лишь в порядке краткого вступления.
3.1. Ввод данных То, что увидит пользователь на экране дисплея после запуска Excel, представлено на рис.1.
Рис.1 Основную часть экрана занимает таблица, строки которой пронумерованы, а столбцы поименованы буквами латинского алфавита. Размер таблицы превышает размеры экрана и потому на экране представлена только часть ее. С помощью горизонтальной и вертикальной «прокрутки» пользователь может «перемещать» экран «над» таблицей и видеть любую ее часть. Количество строк таблицы (теоретически) не ограничено, а количество столбцов равно 230. Первые 26 столбцов имеют однобуквенные имена, следующие 26 столбцов имеют имена от AA до AZ, затем от BA до BZ и так далее вплоть до IV. На пересечении строк и столбцов находятся ячейки, которые и служат для хранения информации. Ячейки идентифицируются путем указания имени столбца и номера строки. Такая идентификация называется адресом ячейки. Например, левая верхняя ячейка имеет адрес A1. На рис.1 эта ячейка выделена черной рамкой. Пользователь может выделить лю5
бую другую ячейку либо с помощью мыши (щелкнув кнопку, когда указатель мыши установлен на нужную ячейку), либо путем перемещения черной рамки клавишами управления курсором (клавишами со стрелками). Ввод информации всегда осуществляется именно в выделенную ячейку. Вводить данные можно разнообразными способами. Укажем два из них. Первый способ позволяет вводить информацию, очищая ячейку от данных, ранее в ней содержащихся. Для этого, выделив нужную ячейку, наберите на клавиатуре требуемый текст и затем нажмите клавишу Enter. Набранные данные отобразятся в выделенной ячейке, а если в ней находился ранее введенный текст, то он будет удален. Если введенные ранее данные необходимо только подкорректировать, то лучше использовать второй способ: выделив нужную ячейку, следует нажать клавишу F2, подправить текст, а затем нажать клавишу Enter. В обоих случаях завершая ввод информации, можно вместо клавиши Enter использовать какую-либо из клавиш управления курсором (как бы «покидая» ячейку).
3.2. Типы данных, формулы, функции Excel поддерживает все те основные типы данных, которые были изложены в предыдущем параграфе: символьный, числовой и тип «дата». Кроме того, Excel позволяет использовать особый тип данных «формула», который применяется только в электронных таблицах. С помощью формулы пользователь может указать правило вычисления нужного значения. Excel произведет вычисления по этому правилу, а результат будет показан в той ячейке, в которую был введен текст формулы. Рассмотрим пример. Допустим, что пользователь часто звонит в Москву и хочет с помощью компьютера контролировать свои расходы на телефонные переговоры. Стоимость одной минуты разговора с Москвой равна 4 руб. 63 коп., а по льготному тарифу – 1 руб. 94 коп. В ячейку В3 пользователь будет вводить длительность разговоров по обычному тарифу, а в ячейку В4 – по льготному. В ячейках С3 и С4 нужно «сконструировать» формулы, позволяющие рассчитать расходы на каждый из этих видов переговоров (перемножение ставки тарифа на затраченное время). Наконец, в ячейке D4 пользователь желает видеть общую затраченную сумму. На рис.2 показано, какой текст нужно ввести в указанные ячейки. Для примера принято, что по обычному тарифу пользователь говорил 34 минуты, а по льготному тарифу – 87 минут. В таблицу добавлены поясняющие заголовки, а также (в ячейку Е4) – информация о дате, когда пользователь вводил данные
Рис.2 Ячейка С3 содержит формулу, в состав которой входит адрес ячейки В3 (в таких случаях говорят, что формула содержит «ссылку» на ячейку). При вычислении значения формулы, Excel вместо адреса ячейки подставит то значение, которое в данный момент хранит ячейка. Символ «*» в информатике означает операцию умножения. Формула в ячейке D4 представляет собой операцию суммирования значений, хранящихся в ячейках С3 и С4. Разу-
6
меется, что суммироваться будут не записанные в этих ячейках формулы, а те числа, которые получатся после вычислений по формулам. Поскольку пользователя интересует не столько вводимый текст формул, сколько результат вычислений, то Excel покажет на экране не то, что изображено на рис.2, а то, что показано на рис.3
Рис.3 Разработанную таблицу можно сохранить на внешнем носителе, и в дальнейшем, как только пользователь проведет очередные разговоры с Москвой, ему достаточно обновить числа в ячейках В3 и В4. Excel произведет вычисления, исходя из новых данных, и пользователь увидит новый итог своих расходов. В таблице на рис.3 имеются все основные типы данных, поддерживаемые Excel: в ячейки В3 и В4 введены числовые данные; в ячейку Е4 – тип дата; в ячейках С3, С4 и D4 содержатся формулы, а во всех остальных ячейках – символьные данные. Excel различает тип данных, вводимый в ту или иную ячейку по «внешнему виду» информации. Правила распознавания типа данных следующие: • тип «формула» должен быть отмечен знаком «=», предшествующим тексту формулы; • данное относится к числовому типу, если введенный текст представляет собой запись числа (в одной из принятых форм) и если этот текст не начинается знаком «апострофа» (‘); • данное относится к типу «дата», если введенный текст представляет собой запись календарной даты и текст этот не начинается знаком «апострофа» или символом «пробел»; • во всех остальных случаях введенная информация относится к символьному типу данных. Из всех этих правил существенным является первое, а все остальные настолько естественны, что пользователь вводит информацию, часто даже не задумываясь о требуемом типе данных. Такое «дружелюбие» со стороны Excel весьма полезно, но оно же иногда приводит к необъяснимым на первый взгляд «ошибкам» в построенных таблицах. Чаще всего такие «ошибки» возникают при работе с датами. Рассмотрим на эту тему пример. Допустим, нам требуется определить текущий возраст (число полных лет) пациента, зная его дату рождения. Мы уже знаем (см. в § 2 абзац, посвященный типу «дата») что можно от одной даты вычесть другую, в результате чего получим число дней, разделяющих эти две даты. Поэтому определить возраст пациента можно следующей последовательностью действий: • от текущей даты вычесть дату рождения пациента; • получившееся число дней, прожитых пациентом, разделить на среднее число дней в году (365,25); • у получившегося дробного числа отбросить дробную часть (сделать это можно с помощью одной из функций Excel). На рис.4 показаны формулы, решающие наш простой пример (в качестве дня рождения пациента взята дата 25 сентября 1978 года). 7
Рис.4 В ячейку А2 записана формула, представляющая из себя исполнение функции Excel СЕГОДНЯ(), значением которой является текущая дата (по часам компьютера). В ячейку В2 вводится дата рождения пациента. Значением формулы в ячейке С2 является разность двух предыдущих дат. Формула в ячейке D2 делит число дней, прожитых пациентом на среднее число дней в году. Наконец формула в ячейке Е2 содержит исполнение еще одной функции Excel, которая от результата, полученного в ячейке D2, отбрасывает дробную часть. На рис.5 показан результат вычисления по введенным формулам.
Рис.5 Разумеется, совсем другой результат мы ожидали. В ячейке С2, например, должно получиться целое число (число дней, разделяющее даты в ячейках А2 и В2). Почему же в ячейке С2 высвечивается какая-то странная дата? Дело в том, что Excel хранит «внутри себя» даты как целое число, означающее число дней, прошедшее от начала 20-го века (т.е. с 1 января 1900 года). Такое внутримашинное представление дат дает возможность легко совершать предусмотренные операции над датами. Но это приводит к тому, что обычные целые числа и даты Excel различает только в зависимости от типа ячейки. Если ячейка хранит число 5 и имеет числовой тип данных, мы увидим в этой ячейке число 5, а если поменять тип данных для ячейки на «дату» (не меняя самого хранимого значения), то мы увидим все в той же ячейке дату «5 января 1900 года». Теперь мы можем понять, почему наши «правильные» формулы привели к странному результату. Для ячеек А2 и В2 Excel установил тип «дата», по правилам распознавания типа данных (и это нас вполне устраивает). Поскольку в ячейке С2 находится формула, операндами которой являются даты, то Excel и для этой ячейки установил тип «дата», что нас уже не устраивает. Стало быть, для исправления «ошибки» надо поменять тип данных для ячеек С2, D2 и Е2 на числовой. (Сделать это можно, например, следующим образом: выделив ячейку, щелкнуть правой кнопкой мыши. В появившемся контекстном меню выбрать пункт «формат ячейки». Затем выбрать вкладку «Число» и в ней формат «Общий».) Установив нужный тип данных в указанных ячейках, мы получим именно тот результат, который рассчитывали увидеть. Он показан на рис.6. Замечания. 1. Может возникнуть недоумение: почему Excel «сам» не установил числовой тип данных для ячейки С2? Видимо, разработчики Excel полагали, что разность дат пользователь пожелает видеть как количество дней, месяцев и лет, разделяющих две даты. Именно такой результат и получится (он показан в ячейке С2 на рис.5),
8
если трактовать полное количество дней, разделяющих две даты, как самостоятельную дату. 2. Поскольку даты отсчитываются от 1 января 1900 года, то более ранние даты Excel не поддерживает.
Рис.6 Если в последнем примере нас не интересуют промежуточные результаты (что обычно и бывает), то в формулу ячейки Е2 (где подсчитывается окончательный результат) следует последовательно «вставить» формулы из «промежуточных» ячеек. Конечно, итоговая формула будет иметь достаточно громоздкий вид, но зато в таблице не останется ничего лишнего. В нашем примере поэтапное получение итоговой формулы будет выглядеть следующим образом: 1. Вместо ЦЕЛОЕ(D2) получаем ЦЕЛОЕ(С2/365,25); 2. Вместо ЦЕЛОЕ(С2/365,25) получаем ЦЕЛОЕ((А2-В2)/365,25); 3. Вместо ЦЕЛОЕ((А2-В2)/365,25) получаем ЦЕЛОЕ((СЕГОДНЯ()-В2)/365,25). После подстановки окончательного текста формулы в ячейку Е2, можно очистить содержимое ячеек А2, С2 и D2. В результате, в таблице будут заполнены только две ячейки: В2 (исходное данное) и Е2 (результат). При решении рассмотренного примера нам пришлось воспользоваться некоторыми функциями Excel. Функции Excel – это мощное средство, значительно облегчающее работу пользователя при разработке формул. Если необходимо использовать какую-либо функцию в формуле, то следует ввести имя функции (СЕГОДНЯ или ЦЕЛОЕ в нашем примере), а затем в скобках – список параметров. Если функция параметров не имеет (как например, СЕГОДНЯ), то скобки все равно нельзя опускать (наличие скобок позволяет Excel отличить функцию от всех прочих компонент, используемых в формулах). Количество функций, встроенных в Excel довольно значительно (свыше двух сотен). Помнить их всех не обязательно, поскольку в Excel имеется система «подсказок», облегчающая ввод нужной функции в формулу. Вызов этой системы осуществляется нажатием кнопки «f x» или кнопки с символом «=», находящейся над строкой с именами столбцов.
3.3. Диапазоны В Excel имеется целый ряд функций, которые в качестве параметра имеют ссылку не на отдельную ячейку (как, например, функция ЦЕЛОЕ на рис.4), а на группу ячеек. Для примера рассмотрим одну из наиболее часто встречающихся функций, с помощью которой можно суммировать числовые значения, хранящиеся в группе смежных ячеек. Введите какие-нибудь числа в ячейки А1, А2,…А5, В1,В2,…В5, С1,С2,…С5. Затем выделите ячейку А6, нажмите кнопку с символом Σ и потом клавишу Enter. Если все сделано правильно, то в ячейку А6 Excel поместит текст «=СУММ(А1:А5)», представляющий собой обращение к функции СУММ, которая в нашем случае осуществляет суммирование значений всех ячеек от А1 до А5 включительно. Параметром функции СУММ является диапазон ячеек, который задается именами первой и конечной ячеек, разделенных знаком «двоеточие». Диапазон может охватывать не только группу клеток «по вертикали», но и «по горизонтали»: если в ячейку D1 ввести текст 9
«=СУММ(А1:С1)», то в этой ячейке появится сумма значений, хранящихся в ячейках А1, В1 и С1. Рассмотрим теперь самый общий случай диапазона. Введем в ячейку D6 формулу «=СУММ(А1:С5)». В этой ячейке появится сумма всех чисел прямоугольного фрагмента таблицы, где ячейки А1 и С5 являются конечными ячейками одной из диагонали этого прямоугольника. Этот же прямоугольный фрагмент можно задать иначе (используя другую диагональ): С1: А5. (Можно к тому же переставить имена начальной и конечной ячеек местами: А5:С1, правда Excel в этом случае поменяет адресацию диапазона на более удобный для него вариант: А1:С5.) Отметим, что как «вертикальный», так и «горизонтальный» диапазоны являются частными случаями более общего прямоугольного диапазона. Наконец, отдельную ячейку можно также рассматривать как частный случай диапазона (т.е. вполне допустима формула «=СУММ(А1)»).
3.4. Базы данных в Excel Познакомившись с основными правилами построения в Excel электронных таблиц, предназначенных для обычных вычислений, рассмотрим теперь, как можно организовать данные в таком виде, который очень похож на таблицу реляционной базы данных. Предположим, что требуется хранить следующую информацию о студентах (в скобках указаны предлагаемые имена соответствующих полей): • Фамилия, имя (Family) • Дата рождения (BirthDay) • Возраст (Age) • На каком курсе учится (Year) • Учится ли без троек (GoodLearned) • Размер стипендии (Grant) Мы уже рассматривали задачу определения текущего возраста по дате рождения, поэтому для определения возраста будем использовать разработанную нами формулу (разумеется, эта формула не является единственным и лучшим способом вычисления возраста; приведена она была главным образом в учебных целях). Таким образом, поле «Age» будет «вычисляемым» полем. Условимся, что в поле «GoodLearned» будем вводить знак «+», если студент учится без троек и знак «-» в противном случае. В этом поле, таким образом, будут встречаться всего два различных значения. Такого типа поля принято относить к логическому типу данных. В логических полях хранятся значения «истина» либо «ложь» (вместо «+» либо «-», как мы условились). Однако Excel не поддерживает логический тип данных для ячеек, и по этой причине нам пришлось поступить так, как оговорено выше. Поле «Grant» как и поле «Age» сделаем вычисляемым. Предположим, что студентам назначается стипендия в размере 850 руб. 60 коп., если студент учится без троек, и дается стипендия в размере 350 руб. 20 коп. в противном случае. Построим формулу, с помощью которой стипендия будет вычисляться по таким правилам. Пусть значение поля «GoodLearned» хранится в ячейке Е3. Тогда текст требуемой формулы может быть таким: «=ЕСЛИ (E3=”+”; 850,60; 350,20)». Приведенная формула содержит использование функции ЕСЛИ, которая требует три параметра, отделяемых друг от друга знаком «точка с запятой». Первым параметром является логическое условие (в нашем случае это условие состоит в проверке того, что в ячейке Е3 хранится знак «+»). Если условие выполнено (это означает, что студент учится без троек), то значением функции является значение второго параметра (т.е. величина 850,60); в противном случае значением функции является значение третьего параметра (в нашем примере это величина 350,20). Примерный вид таблицы приведен на рис.7. 10
Рис.7 Заполнение столбцов «С» и «F» (то есть вычисляемых полей) этой таблицы производилось с помощью распространения формулы. Опишем этот процесс на примере столбца «С». В ячейку С3 был введен текст формулы, вычисляющей возраст по дате рождения, хранимой в ячейке В3. Затем ячейка С3 была выделена (путем установки указателя мыши на эту ячейку с последующим щелчком левой кнопкой мыши). Далее указатель мыши был перемещен на правый нижний угол рамки, обрамляющей выделенную ячейку. В этом углу находится маленький черный квадратик (см. ячейку В10 на рис.7). Когда указатель мыши «наведен» на этот квадратик, вид указателя мыши изменяется (он превращается в небольшой черный крестик). В этот момент следует нажать левую кнопку мыши и не отпуская ее «тащить» мышь вниз, пока выделение не окрасит все нужные ячейки (в нашем примере мышь надо было «дотащить» до ячейки С9), после чего кнопку мыши нужно отпустить. Описанное действие будем называть распространением формулы, поскольку в результате этого действия формула, введенная в ячейку С3, была скопирована во все нижележащие ячейки (до которых мы «дотащили» мышь) и при этом скорректирована так, чтобы все эти формулы ссылались на ячейку слева. Иными словами, если формула в ячейке С3 вычисляет возраст по дате рождения, хранящейся слева от С3 (т.е. ссылается на ячейку В3), то формула в ячейке С4 вычисляет возраст по дате рождения, хранящейся слева от С4 (ссылается на ячейку В4) и подобную коррекция текста формул Excel проделал во всех ячейках, на которые мы ему указали. Итак, один раз введя формулу и тщательно ее проверив, применив распространение, мы занесли текст формулы во все нужные ячейки, а Excel обеспечил нужную коррекцию этого текста, так что каждая формула ссылается на «свои» данные. В примере, приведенном на рис.7, диапазон А3:F9 во многом схож с таблицей реляционной базы данных. Excel предоставляет особые средства для обработки подобных структур. Прежде, чем переходить к их рассмотрению, отметим, что Excel дает пользователю право «нарушать» принципы построения таблицы реляционной БД, например, можно ввести данные различных типов в ячейки, находящиеся в одном столбце. (Следствием такого нестрогого подхода Excel к формированию структуры таблицы является более низкая эффективность обработки баз данных по сравнению со «строгими» СУБД.) При работе с Excel, под термином «база данных» понимается прямоугольный диапазон с данными, содержащий в первой строке имена полей. Таким образом, в терминах Excel, базой данных в примере на рис.7 является диапазон А2:F9 (а не А3:F9). Рассмотрим на 11
этом примере основные средства Excel для работы с подобными «базами данных». Оговоримся сразу, что эти средства требуются, главным образом, при больших размерах баз данных (порядка сотен и тысяч записей), когда путем визуального поиска трудно отыскать нужную строку для просмотра и коррекции данных, находящихся в ней.
1. Работа с данными в режиме «Форма». Чтобы воспользоваться этим средством, нужно выделить весь диапазон А2:F9 (для этого следует установить указатель мыши в одну из угловых ячеек диапазона, нажать левую кнопку мыши и не отпуская ее переместить указатель в противоположный угол), затем последовательно выбрать пункт меню «Данные» и подпункт «Форма».
Рис.8 На экране появилось дополнительное «окно» – форма, позволяющая посматривать записи (строки) выделенного диапазона в удобном режиме. Посредством формы, Excel позволяет добавлять, корректировать и удалять записи; перемещаться по записям диапазона «вверх» и «вниз» (кнопки «Назад» и «Далее»), а также установить требуемое пользователю правило отбора записей (кнопка «Критерии»). Окно для задания критериев, выглядит почти так же, как и окно «Форма», но вводимые в нем значения полей служат для задания «фильтра» – после возврата из окна «Критерии» в окне «Форма» будут показываться только те строки-записи диапазона, в которых значения соответствующих полей совпадают со значе12
ниями, указанными в «Критериях». Например, можно потребовать от Excel, чтобы в «Форме» показывались только строки, содержащие сведения о студентах второго курса, которые учатся без троек.
2. Работа с данными в режиме «Автофильтр». Снова выделим весь диапазон А2:F9, затем последовательно выберем пункты меню «Данные», «Фильтр» и «Автофильтр».
Рис.9 Справа от имен столбцов появились кнопки «выпадающего меню». При нажатии на такую кнопку (на рис.9 нажата кнопка поля «Year») показывается список всех различных значений в соответствующем столбце (а также некоторые другие возможности для фильтрации данных). После задания нужного значения, Excel покажет только строки, удовлетворяющие выбранному критерию. Подобным образом можно задавать нужные значения для фильтрации данных в разных столбцах, независимо друг от друга. В больших базах данных таким приемом можно сократить общий объем видимой информации до вполне обозримых размеров.
3. Использование специальных функций (функции базы данных). Если пользователя не удовлетворяют упомянутые выше приемы работы с базой данных, он может воспользоваться возможностями, предоставляемыми функциями Excel, которые специально предназначены для этих целей. Рассмотрим правила работы с этими функциями на примере одной из них, функции БИЗВЛЕЧЬ. Эта функция просматривает содержимое базы данных в поисках строки, удовлетворяющей установленному критерию. Если такая строка имеется, то из нее извлекается содержимое поля, указанного пользователем. Все функции базы данных имеют три параметра: • диапазон, задающий обрабатываемую базу данных; • имя поля (столбца), значение которого обрабатывается функцией; • диапазон, задающий критерий поиска. Из этих трех параметров особого пояснения требует, по-видимому, только последний. Критерий поиска – это диапазон, содержащий имена полей (идентичные именам столбцов базы данных) и условия, которым должны эти поля удовлетворять. Как всегда, рассмотрим это понятие на примере (см. рис.10).
13
Рис.10 На рис.10 приведено решение задачи о поиске в базе данных, определяемой диапазоном А2:F9, студентки, о которой известно, что зовут ее Елена, что ей более 17 лет и что она учится на 2-м, 3-м или 4-м курсе. Нужно по этим данным установить фамилию студентки, а так же дату ее рождения. Критерий поиска для решения этой задачи построен в диапазоне А11:D12. Первая строка диапазона – копии заголовков некоторых столбцов базы данных, а именно тех столбцов, которые «участвуют» в формулировке критериев отбора нужной строки базы данных. Вторая строка диапазона – условия, которым должна удовлетворять искомая запись. Условие в ячейке А12 означает, что в поле «Family» искомой строки должен содержаться текст, оканчивающий словом «Елена», а начинается этот текст произвольным количеством произвольных символов (именно это и обозначается символом «*»). Условие в ячейке В12 определяет, что в поле «Age» нужной строки должно содержаться число, большее 17. Наконец, в ячейках C12 и D12 устанавливаются два условия на одно и то же поле «Year», (которые должны выполняться одновременно). Результаты работы функции БИЗВЛЕЧЬ показаны в ячейках А15 и В15. В обеих этих ячейках содержатся формулы с вызовом этой функции. Различаются эти формулы только вычисляемым значением (т.е. вторым параметром функции).В ячейке А15 вычисляемым значением является поле «Family», а в ячейке В15 – поле «BirthDay». Текст этих формул выглядит следующим образом. - Ячейка А15: «=БИЗВЛЕЧЬ(А2:F9; ”Family”; А11:D12)». - Ячейка B15: «=БИЗВЛЕЧЬ(А2:F9; ” BirthDay ”; А11:D12)». Если функция БИЗВЛЕЧЬ найдет более одной строки, удовлетворяющей критерию поиска, то результатом работы функции будет сообщение «#ЧИСЛО!», если же ни одна строка базы данных не удовлетворяет заданному критерию, то сообщением будет текст «#ЗНАЧ!». В заключение, приведем в обзорном порядке еще несколько функций, ориентированных на работу с базами данных Excel. Функция БСЧЕТА позволяет подсчитать количество 14
записей, удовлетворяющих заданному критерию. Например, для приведенной на рис.10 базы данных можно подсчитать суммарное количество студентов, обучающихся на 2-м, 3-м и 4-м курсах, если в некоторую ячейку ввести текст следующей формулы: «=БСЧЕТА(A2:F9; ”Family”; C11:D12)». Данная формула использует в качестве критерия диапазон C11:D12, где установлены нужные условия на значения поля ”Year”. В качестве второго параметра можно указать заголовок любого поля, не содержащего «пустых» (т.е. не заполненных) значений. (в нашем примере выбрано поле ”Family”) Функция ДМАКС позволяет найти запись с максимальным значением некоторого поля. Формула «=ДМАКС(A2:F9;"BirthDay";C11:C12)», например, определит дату рождения самого молодого из студентов, обучающихся на всех курсах, кроме первого. Аналогично, функция ДМИН позволяет найти запись с минимальным значением некоторого поля. Наконец, функция БДСУММ находит сумму чисел, расположенных в заданном столбце, при этом учитываются только записи, удовлетворяющие нужному критерию. Например, с помощью формулы «=БДСУММ(A2:F9;F2;D11:D12)» можно определить сумму стипендий, выплачиваемых студентам первых 4-х курсов.
§ 4. Система управления базой данных Microsoft Access СУБД Microsoft Access – одна из самых популярных среди программных продуктов, ориентированных на разработку баз данных с использованием персональных компьютеров. В этой СУБД удачно сочетаются легкость использования и полная функциональность, что делают ее привлекательной как для опытных, так и для начинающих пользователей. В каждый момент времени Access может работать только с одной базой данных. База данных Access содержит объекты различного вида. Прежде всего, это таблицы (см. §2). Как уже подчеркивалось, таблицы являются основным «хранилищем» информации в реляционных СУБД. Прежде, чем в такую таблицу можно вводить данные, необходимо полностью описать ее структуру (т.е. перечень полей и типы данных, хранимых в каждом поле). Естественно начать знакомство с СУБД Access с процесса создания структуры таблицы.
4.1. Создание таблиц в СУБД Access После запуска, Access. предлагает три варианта работы. Выберем вариант «Новая база данных», укажем диск и каталог, где будет храниться файл базы данных, а также введем его имя. (Впоследствии, для работы с уже созданной базой данной, нужно будет выбирать вариант «Открыть базу данных» с указанием ее месторасположения и имени). Появится окно «База данных», содержащее шесть закладок, соответственно шести типам объектов, которые может иметь БД. В закладке «Таблицы» выберем режим «Создать» и далее «Конструктор». Создание таблицы в режиме «Конструктор» предоставляет наиболее полные возможности по формированию ее структуры. Этот режим мы и рассмотрим. Построим таблицу для хранения информации о студентах подобно той, которую мы рассматривали в п.3.4, со следующими изменениями: вместо поля «Age» введем поле «Phone», для хранения данных о номере телефона, а также добавим поле «Code» смысл и назначение которого выяснится позже. (Эта таблица будем в дальнейшем служить иллюстративным примером для пояснения рассматриваемого в данном параграфе материала). Примерный вид окна «конструктора» (с внесенными данными о структуре разрабатываемой нами таблицы) представлен на рис.11. Каждая строка в окне «конструктора» соответствует одному полю (одному столбцу) создаваемой таблицы. В первой колонке следует ввести имя поля, а во второй – выбрать один из допустимых типов данных. В третью колонку можно внести комментарий (как правило, это краткое описание назначения данного поля). В нижней части окна «конструктора» 15
Рис.11 приведен перечень атрибутов поля, значения многих из которых весьма существенны для свойств создаваемой таблицы. Набор атрибутов различен для разных типов данных. Для начинающего пользователя основную трудность представляет проблема правильного выбора типа данных и нужных значений атрибутов. Разберем эти вопросы подробнее.
1. Основные типы данных, поддерживаемые СУБД Access. 1.1. Текстовый тип позволяет хранить и обрабатывать строки символов, аналогично тому, как это реализовано в «Excel». На рис.11 этот тип данных выбран для поля «Family». Разберем смысл некоторых атрибутов текстового поля. Для атрибута «Размер поля» Access предлагает значение равное 50. Если самый длинный текст, который будет храниться в текстовом поле меньше (или больше) этого числа, то значение этого атрибута нужно соответственно изменить. Максимальное значение этого атрибута, допустимое в Access, равно 255 символам. Атрибут «Обязательное поле» имеет значения «Да» или «Нет». Установим для поля «Family» значение «Да» у этого атрибута. Тогда Access не разрешит ввести запись с незаполненным полем «Family» (и тем самым будет осуществляться дополнительный контроль за действиями оператора, вводящего информацию в базу данных). Еще один вид контроля осуществляется с помощью атрибута «Пустые строки». Значение «Нет» этого атрибута не позволит ввести запись, где соответствующее поле заполнено только пробелами. Атрибуту «Индексированное поле» Access предлагает установить значение «Нет». Если содержимое таблицы нужно будет просматривать (либо выводить на печать), упорядоченным по значению данного поля (вне зависимости то того, в каком порядке вводились данные), то нужно изменить значение этого атрибута либо на «Да (Допускаются совпаде16
ния)», либо на «Да (Совпадения не допускаются)». В нашем примере для поля «Family» указанному атрибуту разумно установить значение «Да (Допускаются совпадения)», поскольку возможна ситуация, когда две разные записи имеют одинаковые значения этого поля. Ниже мы подробнее обсудим понятие индексированного поля. Атрибуты «Обязательное поле» и «Индексированное поле» используются в вышеизложенном смысле не только для текстовых полей, но и для полей всех других типов. 1.2. Числовой тип данных. На рис.11 этот тип выбран для полей «Year», «Phone» и «Grant». По своему смыслу все эти поля должны хранить числа из существенно различных диапазонов, что устанавливается с помощью атрибута «Размер поля», который для числовых полей имеет следующие значения. • Значение «Байт» означает, что в данном поле будут храниться «небольшие» целые числа, а именно, целые числа из диапазона от 0 до 255. В нашем примере такое значение «Размера поля» выбрано для поля «Year». • Значение «Целое» предназначено для хранения целых чисел «побольше», а именно, чисел из диапазона от –32 768 до +32 767. (Отметим, что в нашем примере такой вариант не годился для поля «Phone», поскольку номера телефонов выходят за пределы указанного диапазона). • Значение «Длинное целое» предназначено для хранения еще больших целых чисел, а именно, чисел из диапазона от –2 147 483 648 до +2 147 483 647. (Именно такое значение «Размера поля» установлено для поля «Phone»). «Длинные целые» – это самые большие целые числа, которые позволяет хранить и обрабатывать современная реализация СУБД Access. • Значение «С плавающей точкой (4 байт)» предназначено для хранения «дробных» чисел с относительно небольшой точностью: до 7 значащих десятичных цифр. (Для студенческой стипендии такая точность вполне достаточна, поэтому для поля «Grant» выбрано именно это значение «Размера поля»). • Наконец, значение «С плавающей точкой (8 байт)» предназначено для хранения «дробных» чисел с точностью до 15 значащих десятичных цифр. 1.3. Тип данных Дата/время. Этот тип данных позволяет хранить в одном поле одновременно как календарную дату, так и время суток. С помощью атрибута «Формат поля» можно указать в каком виде Access должен показывать значение поля пользователю. 1.4. Логический тип данных. Этот тип данных удобно использовать в тех случаях, когда поле предназначено для хранения одного из двух возможных значений. С помощью атрибута «Формат поля» можно указать в каком виде Access должен показывать значение поля пользователю. На рис.11 логический тип данных выбран для поля «GoodLearned», а атрибут «Формат поля» задан таким образом, чтобы значения поля показывались пользователю в виде «Да/Нет». 1.5. Тип данных Денежный позволяет хранить числа в том виде, как это требуется в банковских операциях: до 15 десятичных цифр в целой части числа и до 4-х десятичных цифр – в дробной его части. 1.6. Тип данных Счетчик является особой разновидностью числового типа данных. Таблица базы данных может иметь не более одного поля с таким типом. Назначение таких полей мы обсудим немного позже. СУБД Access поддерживает еще 3 типа данных, которые используются относительно редко и потому не рассматриваются в настоящем пособии. В приведенном на рис.11 примере первые 6 полей предназначены для хранения оговоренной нами информации о студентах. Если в структуре таблицы оставить только эти поля и завершить работу с «конструктором» (для чего нужно щелкнуть мышкой на крестике в правом верхнем углу окна «конструктора»), то Access (запросив подтверждение на сохранение структуры таблицы и предложив нам ввести наименование таблицы) предупредит нас, что в структуре таблицы не задано ключевое поле. Текст сообщения Access содержит настоя17
тельную рекомендацию добавить подобное поле в структуру таблицы и предложение сделать это за нас. Если согласиться с таким предложением, то в структуру таблицы будет добавлено еще одно поле (которое показано последним на рис.11), а слева от имени поля появится признак ключевого поля.
2. Первичный ключ таблицы реляционной базы данных. В теории реляционных баз данных сформулированы основные принципы, которым должны удовлетворять правильно спроектированные таблицы, составляющие основу базы данных. Первый из этих принципов заключается в том, что все записи таблицы должны быть уникальны. На примере нашей таблицы это означает, что в ней не должны содержаться две записи (с информацией о двух разных студентах), в которых совпадают значения всех полей. Наличие двух таких записей означало бы очень маловероятную, но возможную ситуацию, что на одном и том же курсе обучаются два студента, с одинаковой фамилией, родившихся в один и тот же день, живущих вместе (и поэтому у них одинаковый телефон), одинаково хорошо (или плохо) успевающих и потому имеющих одинаковую стипендию! Если все же такая ситуация имеет место, и одному из этих студентов-близнецов, например, увеличили стипендию, то как определить: какая из двух одинаковых записей к какому «близнецу» относится и в какую из них вносить изменение в поле «Grant»? В принципе, можно, конечно, изменить поле «Grant» в «первой попавшейся» из этих двух записей (коль скоро они одинаковые, то не все ли равно какую из них выбрать!..). После такого действия записи будут уже различными (и таблица в целом будет удовлетворять первому принципу), но понятно, что поле «Grant» является не очень надежным критерием для идентификации конкретного студента (к тому же стипендию могут вновь уменьшить). Чтобы в проектируемой таблице не возникали вышеописанные проблемы, необходимо ввести в ее структуру поле (или совокупность полей), значение которого (или которых) однозначно идентифицирует объект, информация о котором хранится в базе данных. Такое поле (совокупность полей) называется ключевым полем (или первичным ключом) таблицы реляционной базы данных. (В нашем примере роль первичного ключа могло бы играть поле с номером личного дела студента, который назначается как раз с таким расчетом, чтобы быть уникальным). В дальнейшем мы ограничимся случаем, когда первичным ключом является отдельное поле таблицы (случай составного первичного ключа встречается крайне редко). Из определения первичного ключа очевидно следует, что его значение различно для разных записей таблицы. Если при создании таблицы в ее структуре не определен первичный ключ, то Access предложит создать ключевое поле с именем «Code» и выберет для этого поля тип «Счетчик». Этот тип данных отличается от типа «Длинное целое» лишь тем, что поле с типом «Счетчик» Access заполняет автоматически последовательными целыми числами, начиная с 1, причем пользователь не может изменить значение такого поля. Последнее обстоятельство является одной из причин, по которым целесообразно вводить в структуру таблицы в качестве первичного ключа какой-нибудь «естественный признак», идентифицирующий объект, не полагаясь на «услугу» Access. Следует отметить, что если поле таблицы определено как ключевое, то для этого поля атрибуту «Индексированное поле» автоматически устанавливается значение «Да (Совпадения не допускаются)». При вводе информации такое поле нельзя оставлять незаполненным (хотя Access и не устанавливает атрибуту «Обязательное поле» значение «Да»).
3. Нормализация базы данных. Структура базы данных считается неправильно спроектированной, если она допускает ненужное повторение данных, которое может явиться причиной ошибок при вводе и нера18
ционального использования внешней (дисковой) памяти компьютера. Чтобы пояснить суть проблемы, рассмотрим еще один пример хранения информации о студентах. Предположим, что в структуре базы данных «Студент» решено хранить следующую информацию: номер личного дела (ключевое поле), фамилию, номер курса и специальность, по которой студент обучается. Если хранить эту информацию в одной таблице, как мы поступали до сих пор, то структура такой таблицы может выглядеть следующим образом. Структура таблицы «Студенты» Имя поля Тип данных StudentCode
Числовой (Длинное целое)
Family
Текстовый (20 символов)
Year
Числовой (Байт)
Speciality
Текстовый (100 символов)
После ввода информации в такую таблицу, ее содержимое может быть, например, таким: Содержимое таблицы «Студенты» StudentCode Family Year Speciality 991243 991247 991252 991258 991267 …
Андреев Борисов Васнецов Гаврилов Данилов …
4 4 4 4 4 …
Иранская филология История Японии Иранская филология Иранская филология История Японии …
Хранение оговоренной информации о студентах в одной таблице приводит к ряду проблем при работе с такой таблицей. Перечислим основные из них: 1. Затрудняется ввод данных. Необходимо, чтобы наименование одной и той же специальности было одинаково введено во всех записях. Если, например, в одном случае в названии специальности «Иранская филология» слова разделены одним пробелом, в другом случае – двумя пробелами, а в третьем случае лишний пробел случайно появился перед первым словом (именно так введены данные в нашем примере), то при обработке данных (скажем, при выборке из таблицы фамилий студентов, обучающихся по этой специальности) СУБД будет трактовать указанные случаи как наименования различных специальностей. 2. При изменении содержимого повторяющегося поля, необходимо проводить коррекцию многих записей. Например, если специальность «Иранская филология» переименована и получила название «Иранская филология и этнография», то необходимо скорректировать все записи, которые в столбце «Speciality» содержали старое название специальности. 3. Наличие повторяющейся информации приводит к неоправданному увеличению размера базы данных, что приводит, в частности, к снижению скорости обработки данных. Процесс устранения дублирующихся данных называется нормализацией. Он заключается в реорганизации таблиц с повторяющимися данными в группы связных таблиц. Проведем нормализацию для вышеприведенного примера. Во-первых, нужно создать вторую таблицу, где будут содержаться названия всех требуемых специальностей. Структура такой таблицы может содержать всего два поля: код специальности (ключевое поле) и ее наименование.
19
Структура таблицы «Специальности» Имя поля Тип данных SpecialityCode
Числовой (Длинное целое)
Speciality
Текстовый (100 символов)
Содержимое такой таблицы может быть, например, следующим: Содержимое таблицы «Специальности» SpecialityCode Speciality 522603 522604 522605 522606 …
Иранская филология История Японии Китайская филология История Турции …
Во-вторых, необходимо внести изменения в структуру таблицы «Студенты», в которой вместо названия специальности теперь будет храниться ее код. Структура таблицы «Студенты» в нормализованной базе данных Имя поля Тип данных StudentCode
Числовой (Длинное целое)
Family
Текстовый (20 символов)
Year
Числовой (Байт)
SpecCode
Числовой (Длинное целое)
Содержимое таблицы студенты, тоже необходимо скорректировать: Содержимое таблицы «Студенты» в нормализованной базе данных StudentCode Family Year SpecCode 991243 991247 991252 991258 991267 …
Андреев Борисов Васнецов Гаврилов Данилов …
4 4 4 4 4 …
522603 522604 522603 522603 522604 …
В нормализованной базе данных (состоящей из двух таблиц) существенно упрощаются действия по вводу данных, так как название каждой специальности вносится (в таблицу «Специальности») только один раз, а вводить в таблицу «Студенты» код специальности (а не ее наименование) намного проще. Если теперь у какой-либо специальности изменится название, то это изменение нужно внести тоже только один раз в таблицу «Специальности», а в таблице «Студенты» вообще никаких изменений не потребуется. Наконец, общий объем дисковой памяти, требуемый для нормализованной базы данных, заметно меньше, чем он был до нормализации. (Если, допустим, таблица «Студенты» содержала информацию о 1000 студентах, то объем памяти, занимаемый ею до нормализации, составлял 125000 байт. После нормализации эта таблица будет занимать 29000 байт дисковой памяти и кроме того, таблица 20
«Специальности» потребует еще порядка 2000 байт, при условии, что общее число специальности порядка 20-ти.) К перечисленным преимуществам нормализованной базы данных перед ненормализованной добавляются возможности обеспечения целостности данных, которые поддерживает СУБД Access, если произвести связывание таблиц, получившихся после нормализации.
ЛИТЕРАТУРА 1. 2. 3. 4. 5.
Информатика //под ред. проф. Макаровой Н.И., М., 1997. Додж М., Кайнет К. и др. Эффективная работа с Excel 7.0. СПб., 1997. Вейскас Д., Эффективная работа с Microsoft Access 7.0. СПб., 1997. Дейт К. Дж. Введение в системы баз данных. Киев 1998. Мартин Дж. Организация баз данных в вычислительных системах. М., 1980.
21