Сортировка записей в наборе данных
Введение
Предлагаемое пособие представляет собой комплект контрольных работ, который может быть использован для организации контроля знаний студентов. В пособие включены вопросы по следующим разделам: 1. Модели данных 2. Представление данных с помощью модели "сущность-связь" 3. Элементы модели 4. Диаграмма "сущность-связь" 5. Целостность данных 6. SQL запросы 7. Open server В задачах необходимо составить базу данных, состоящую из сущностей и связей. Данное пособие представляет собой один из компонентов учебно-методического комплекса дисциплин «Проектирование информационных систем». Для выполнения заданий возможно любой веб-сервер с поддержкой mysql и phpmyadmin, к примеру Vertrigo Server (распространяется свободно http://vertrigo.sourceforge.net/).
Теоретический материал Модели данных Существует большое разнообразие сложных типов данных, но исследования, проведенные на большом практическом материале, показали, что среди них можно выделить несколько наиболее общих. Обобщенные структурыназывают также моделями данных, т.к. они отражают представление пользователя о данных реального мира. Любая модель данных должна содержать три компоненты: · структура данных - описывает точку зрения пользователя на представление данных. · набор допустимых операций, выполняемых на структуре данных. Модель данных предполагает, как минимум, наличие языка определения данных (ЯОД), описывающего структуру их хранения, и языка манипулирования данными (ЯМД), включающего операции извлечения и модификации данных. · ограничения целостности - механизм поддержания соответствия данных предметной области на основе формально описанных правил. В процессе исторического развития в СУБД использовалось следующие модели данных: · иерархическая, · сетевая, · реляционная. В последнее время все большее значение приобретает объектно-ориентированный подход к представлению данных. 1.2. Представление данных с помощью модели "сущность-связь" Прежде, чем приступать к созданию системы автоматизированной обработки информации, разработчик должен сформировать понятия о предметах, фактах и событиях, которыми будет оперировать данная система. Для того чтобы привести эти понятия к той или иной модели данных, необходимо заменить их информационными представлениями. Одним из наиболее удобных инструментов унифицированного представления данных, независимого от реализующего его программного обеспечения, является модель "сущность-связь" (entity - relationship model, ER - model). Модель "сущность-связь" основывается на некой важной семантической информации о реальном мире и предназначена для логического представления данных. Она определяет значения данных в контексте их взаимосвязи с другими данными. Важным является тот факт, что из модели "сущность-связь" могут быть порождены все существующие модели данных (иерархическая, сетевая, реляционная, объектная), поэтому она является наиболее общей. Модель "сущность-связь" не является моделью данных, поскольку не определяет операций над данными и ограничивается описанием только их логической структуры. Элементы модели Любой фрагмент предметной области может быть представлен как множество сущностей, между которыми существует некоторое множество связей. Дадим определения: Сущность (entity) - это объект, который может быть идентифицирован неким способом, отличающим его от других объектов. Примеры: конкретный человек, предприятие, событие и т.д. Набор сущностей (entity set) - множество сущностей одного типа (обладающих одинаковыми свойствами). Примеры: все люди, предприятия, праздники и т.д. Наборы сущностей не обязательно должны быть непересекающимися. Например, сущность, принадлежащая к набору МУЖЧИНЫ, также принадлежит набору ЛЮДИ. Сущность фактически представляет из себя множество атрибутов, которые описывают свойства всех членов данного набора сущностей. Ключ сущности - группа атрибутов, такая, что отображение набора сущностей в соответствующую группу наборов значений является взаимно-однозначным отображением. Другими словами: ключ сущности - это один или более атрибутов, уникально определяющих данную сущность. В нашем примере ключом сущности СОТРУДНИК является атрибут ТАБЕЛЬНЫЙ_НОМЕР (конечно, только в том случае, если все табельные номера на предприятии уникальны). Связь (relationship) - это ассоциация, установленная между несколькими сущностями. Примеры: · поскольку каждый сотрудник работает в каком-либо отделе, между сущностями СОТРУДНИК и ОТДЕЛ существует связь "работает в" или ОТДЕЛ-РАБОТНИК; · так как один из работников отдела является его руководителем, то между сущностями СОТРУДНИК и ОТДЕЛ имеется связь "руководит" или ОТДЕЛ-РУКОВОДИТЕЛЬ; · могут существовать и связи между сущностями одного типа, например связь РОДИТЕЛЬ - ПОТОМОК между двумя сущностями ЧЕЛОВЕК; Следует отметить, что в методике проектирования данных есть своеобразное правило хорошего тона, согласно которому сущности обозначаются с помощью имен существительных, а связи - глагольными формами. Данное правило, однако, не является обязательным. К сожалению, не существует общих правил определения, что считать сущностью, а что связью. Роль сущности в связи - функция, которую выполняет сущность в данной связи. Например, в связи РОДИТЕЛЬ-ПОТОМОК сущности ЧЕЛОВЕК могут иметь роли "родитель" и "потомок". Указание ролей в модели "сущность-связь" не является обязательным и служит для уточнения семантики связи. Набор связей (relationship set) - это отношение между n (причем n не меньше 2) сущностями, каждая из которых относится к некоторому набору сущностей. Хотя, строго говоря, понятия "связь" и "набор связей" различны (первая является элементом второго), их, тем не менее, очень часто смешивают. Поэтому, в дальнейшем также будем часто пользоваться терминами "связь" имея в виду "набор связей" и "сущность" имея в виду "набор сущностей". В случае n=2, т.е. когда связь объединяет две сущности, она называется бинарной. Доказано, что n-арный набор связей (n>2) всегда можно заменить множеством бинарных, однако первые лучше отображают семантику предметной области. То число сущностей, которое может быть ассоциировано через набор связей с другой сущностью, называют степенью связи. Рассмотрение степеней особенно полезно для бинарных связей. Могут существовать следующие степени бинарных связей:
Рисунок 1 – Сущности Другой важной характеристикой связи помимо ее степени является класс принадлежности входящих в нее сущностей или кардинальность связи. Так как в каждом отделе обязательно должен быть руководитель, то каждой сущности "ОТДЕЛ" непременно должна соответствовать сущность "СОТРУДНИК". Однако, не каждый сотрудник является руководителем отдела, следовательно в данной связи не каждая сущность "СОТРУДНИК" имеет ассоциированную с ней сущность "ОТДЕЛ". Таким образом, говорят, что сущность "СОТРУДНИК" имеет обязательный класс принадлежности (этот факт обозначается также указанием интервала числа возможных вхождений сущности в связь, в данном случае это 1,1), а сущность "ОТДЕЛ" имеет необязательный класс принадлежности (0,1). Теперь данную связь можно описать как 0,1:1,1. Кардинальность бинарных связей степени 1 обозначим следующим образом: Рисунок 2 – Кардинальность бинарных связей степени
Рисунок 3 – Графически степень связи Данный рисунок дополнительно иллюстрирует тот факт, что между двумя сущностями может быть определено несколько наборов связей. Здесь также необходимо учитывать класс принадлежности сущностей. Каждый сотрудник должен работать в каком-либо отделе, но не каждый отдел (например, вновь сформированный) должен включать хотя бы одного сотрудника. Поэтому сущность "ОТДЕЛ" имеет обязательный, а сущность "СОТРУДНИК" необязательный классы принадлежности. Кардинальность бинарных связей степени n обозначим так:
Рисунок 4 – Связь между этими В данном случае, по совершенно очевидным соображениям (каждый контракт заключен с конкретным заказчиком, а каждый заказчик имеет хотя бы один контракт, иначе он не был бы таковым), каждая сущность имеет обязательный класс принадлежности.
1.4 Диаграмма "сущность-связь" Очень важным свойством модели "сущность-связь" является то, что она может быть представлена в виде графической схемы. Это значительно облегчает анализ предметной области. Существует несколько вариантов обозначения элементов диаграммы "сущность-связь", каждый из которых имеет свои положительные черты..
Рисунок 5 – Обозначения Атрибуты с сущностями и сущности со связями соединяются прямыми линиями. В процессе построения диаграммы можно выделить несколько очевидных этапов: 1. Идентификация представляющих интерес сущностей и связей. 2. Идентификация семантической информации в наборах связей (например, является ли некоторый набор связей отображением 1:n). 3. Определение кардинальностей связей. 4. Определение атрибутов и наборов их значений (доменов). 5. Организация данных в виде отношений "сущность-связь". В качестве примера построим диаграмму, отображающую связь данных для подсистемы учета персонала предприятия. Выделим интересующие сущности и связи: 1. Прежде всего, предприятие состоит из отделов, в которых работают сотрудники. Оклад каждого сотрудника зависит от занимаемой им должности (инженер, ведущий инженер, бухгалтер, уборщик и т.д.). Далее предположим, что на нашем предприятии допускается совместительство должностей, т.е. каждый сотрудник может иметь более чем одну должность (и работать более чем в одном отделе), причем может занимать неполную ставку. В то же время, одну и ту же должность могут занимать одновременно несколько сотрудников. В результате этих рассуждений введём наборы сущностей o ОТДЕЛ(ИМЯ_ОТДЕЛА), o СОТРУДНИК(ТАБЕЛЬНЫЙ_НОМЕР, ИМЯ), o ДОЛЖНОСТЬ(ИМЯ_ДОЛЖНОСТИ, ОКЛАД), и и набор связей РАБОТАЕТ_В с атрибутом ставка между ними. Атрибут ставка может принимать значения из интервала [0,1] (больше нуля, но меньше или равен единице), он определяет какую часть должностного оклада получает данный сотрудник. Рисунок 6 – Сущности
Как уже отмечалось выше, каждый n-арный набор связей можно заменить несколькими бинарными наборами. Связь, показанная здесь, безусловно несет более полную информацию о предметной области. Действительно, она однозначно отображает тот факт, что оклад сотрудника зависит от его должности, отдела, где он работает, и ставки. Однако, в этом случае возникают некоторые проблемы с определением степени связи. Хотя, как было сказано, каждый работник может занимать несколько должностей, а в штате каждого отдела существуют вакансии с различными должностями, тем не менее, класс принадлежности сущности ДОЛЖНОСТЬ на приведенном рисунке установлен в (1,1). Это объясняется тем, что ДОЛЖНОСТЬ ассоциируется фактически не с сущностями СОТРУДНИК и ОТДЕЛ, а со связью между ними. Обозначать этот факт предлагается так, как это показано на следующей диаграмме: Рисунок 7 – Сущности и связи
Здесь сущности СОТРУДНИК, ОТДЕЛ и связь РАБОТАЕТ_В агрегируются в некую новую абстрактную сущность, которая ассоциируется с сущностью ДОЛЖНОСТЬ с помощью связи степени n:1. Отобразим ассоциации сотрудников, отделов и должностей с помощью бинарных связей. Рисунок 8 – Сущности и связи В этом случае для адекватного описания семантики предметной области необходимо ввести еще одну сущность ШТАТНАЯ_ЕДИНИЦА, которая фактически заменяет собой связь РАБОТАЕТ_В в абстрактной сущности и поэтому имеет атрибут ставка. Переход от n-арной связи через агрегацию сущностей к набору бинарных связей можно рассматривать как последовательные этапы одного процесса, который приводит к однозначному порождению реляционной модели данных. При построении диаграммы "сущность - связь" можно использовать любой из этих трех способов представления данных. 2. Перечисли ряд объектов, которые будут полезны при моделировании данных рассматриваемого предприятия. Им соответствуют следующие сущности: o ЗАКАЗЧИК(ИМЯ_ЗАКАЗЧИКА,АДРЕС) o КОНТРАКТ (НОМЕР,СРОК_НАЧАЛА,СРОК_ОКОНЧАНИЯ,СУММА) o РАБОЧАЯ ГРУППА(ПРОЦЕНТ_ВОЗНАГРАЖДЕНИЯ) Атрибут "процент_вознаграждения" отражает ту долю стоимости контракта, которая предназначена для оплаты труда членов соответствующей рабочей группы. Смысл остальных атрибутов понятен без дополнительных пояснений. Как правило, один из членов рабочей группы является руководителем по отношению к другим сотрудникам, входящим в ее состав. Для отражения этого факта введём связь "руководит" с кардинальностью 1,1:0,n между сущностями СОТРУДНИК и РАБОЧАЯ_ГРУППА (сотрудник может руководить в произвольном числе рабочих групп, но каждая рабочая группа имеет одного и только одного руководителя). 3. Рассмотрим теперь более внимательно информационный объект "заказчик". На практике очень часто возникает необходимость различать национальную принадлежность юридических лиц, с которыми предприятие вступает в договорные отношения. Это связано с тем, что для зарубежных фирм необходимо хранить, например, сведения о валюте, в которой осуществляются расчеты, языке, на котором подписан контракт и т.д. В свою очередь, для отечественных компаний необходимо иметь сведения об их форме собственности (частная или государственная), поскольку от этого может зависеть порядок налогообложения средств, полученных за выполнение работ по контракту. Рисунок 9 – Сущности и связи
Обобщая все проведенные выше рассуждения, получим диаграмму "сущность-связь", показанную на следующем рисунке.
Рисунок 10 – Сущности и связи
Целостность данных Модель "сущность-связь" также полезна для понимания и спецификации ограничений, направленных на поддержание целостности данных. В модели имеется три типа ограничений на значения: 1. Ограничения на допустимые значения в наборе значений (домене). Домен можно трактовать как область определения атрибута, которая может быть задана либо непрерывным или дискретным интервалом, либо фиксированным списком значений. 2. Ограничения на разрешенные значения для каждого атрибута. Например, возраст сотрудников может быть ограничен интервалом от 18 до 65 лет. 3. Ограничения на существующие значения в базе данных. Например, сумма отчислений с зарплаты сотрудника не должна превышать самой зарплаты. 1.5 Целостность данных SQL запросы Команда отбора данных Общий вид: SELECT ПОЛЕ1, ПОЛЕ2, … ПОЛЕn,FROM ТАБЛИЦА WHERE УСЛОВИЕ Если условие не указано, выбираются все записи из таблицы.
Исходная таблица:
ZARP
В результате выполнения команды:
SELECT FIO FROM ZARP
Набор данных примет вид:
НД
*-позволяет выбрать все поля таблицы.
В результате выполнения команды:
SELECT * FROM ZARP
Набор данных примет вид:
НД
Примеры использования условия Операции отношения >, <, =, >=, <=, <>. Логические операции AND, OR, NOT. Операции отношения имеют более высокий приоритет, чем операции отношения.
Исходная таблица:
ZARP
В результате выполнения команды:
SELECT * FROM ZARP WHERE SUMMA>1500
Набор данных примет вид:
НД
В результате выполнения команды:
SELECT SUMMA FROM ZARP WHERE FIO=’ ИВАНОВ’
Набор данных примет вид:
НД
Сортировка записей в наборе данных
Общий вид команды: SELECT ПОЛЕ1, ПОЛЕ2, ..., ПОЛЕn,FROM ТАБЛИЦА ORDER BY ПОЛЕm, ПОЛЕq,... Исходная таблица:
ZARP
В результате выполнения команды:
SELECT * FROM ZARP ORDER BY FIO
Набор данных примет вид:
НД
Если сортировка производится по нескольким полям, то строки сортируются сначала по значению первого поля, а затем по второму.
В результате выполнения команды:
SELECT * FROM ZARP ORDER BY FIO, SUMMA
Набор данных примет вид:
НД
Если после имени поля сортировки указано ключевое слово DESC, то сортировка выполняется в обратной последовательности (только для этого поля).
В результате выполнения команды:
SELECT * FROM ZARP ORDER BY FIODESC, SUMMA DESC
Набор данных примет вид:
НД
В результате выполнения команды:
SELECT * FROM ZARP ORDER BY FIODESC, SUMMA Набор данных примет вид:
НД
Open server
Open server - это высокопрофессиональный и простой в установке набор, состоящий из Apache (HTTP веб-сервер), PHP (скриптовый язык программирования), MySQL (многопоточная, многопользовательская СУБД), SQLite (встраиваемый движок баз данных), SQLiteManager (многоязычная веб-утилита для управления БД SQLite), PhpMyAdmin (утилита, написанная на PHP для администрирования БД MySQL) и Zend Optimizer (который увеличивает производительность запущенных процессов на 40%) для платформы Windows. C помощью удобного инсталлятора "всё-в-одном" все компоненты устанавливаются в одну директорию и работают сразу же после того как установка закончена. Деинсталлятор позволяет удобно удалять Open server с жесткого диска. Всё это спроектировано так, чтобы занимать как можно меньше места и быть максимально гибким, поэтому отлично подходит для распространения по сети Интернет. Open server хорош как для начинающих так и для более опытных пользователей. Пароли по умолчанию для MySQL & phpMyAdmin Логин: root Пароль: 12345 Краткая инструкция использования Папка для загрузки файлов: www/ Локальный адрес: http://localhost/ Адрес: http://localhost/slaed/index.php в случае если система установлена в директорию www/slaed/ Директорию установки необходимо указывать в адресной строке браузера, в случае если система загружена в папку slaed/ директории www/ Название папки slaed/ Вы можете изменить, но в таком случае, в адресной строке браузера, нужно будет изменить и путь соответственно. Компоненты · Apache 2.0.63 · PHP 5.2.6 · MySQL 5.0.51b · SQLite 3.5.9 · Smarty 2.6.19 · PhpMyAdmin 2.11.7 · ZendOptimizer 3.3.3 · SQLiteManager 1.2.0 Основные функции · Небольшой размер (LZMA сжатие) · Безопасен, потому что содержит последние версии продуктов · Очень простой в установке и использовании · Не требует настройки и ручной установки · Совместим со всеми основными версиями Windows · Полностью бесплатен для любого использования
2. Пример решения задачи Пример1 Задание: спроектировать базу данных “Университет”. База должна содержать данные о студентах, преподавателях, кафедрах, факультетах, успеваемости, расписании учебных занятий, расписании звонков. Обеспечить целостность данных. Минимальное количество сущностей – 10.
План решения:
Составить список сущностей с указанием полей, типов данных, длин полей. Прокомментировать поля. Необходимо учитывать, что все названия сущностей и полей должны содержать только символы латинского алфавита.
1. Studens – Таблица содержащая информацию о студентах
2. Prepod – Таблица содержащая информацию о преподавателях
3. Kaf – Таблица содержащая информацию о кафедрах
4. Fakult – Таблица содержащая информацию о факультетах
5. Obucheniya – Таблица содержащая информацию о типах обучения
6. Dni – Таблица содержащая информацию о днях недели
7. Vermya – Таблица содержащая информацию о звонках
8. Raspis – Таблица содержащая информацию о расписании учебных занятий.
9. Tip_par – Таблица содержащая информацию о типах учебных занятий
10. Usp – Таблица содержащая информацию о успеваемости студентов
11. Tip_sdachi – Таблица содержащая информацию о типах проведения оценки студентов.
12. Disc – Таблица содержащая информацию о дисциплинах
13. Group – Таблица содержащая информацию о группах
14. Spec – Таблица содержащая информацию о специальностях
15. Uch_zv – Таблица содержащая информацию о учёных званиях
16. Pol – Таблица содержащая информацию полу человека
Указать все связи (родитель-потомок), указать отображаемые поля. Сгенерировать отчёт, дамп таблицы. Спроектированная база данных с сущностями и связями будет иметь вид:
-- phpMyAdmin SQL Dump -- version 2.11.7 -- http://www.phpmyadmin.net -- -- Хост: localhost -- Время создания: Апр 26 2009 г., 11:10 -- Версия сервера: 5.0.51 -- Версия PHP: 5.2.6
SET SQL_MODE="NO_AUTO_VALUE_ON_ZERO"; -- -- База данных: `universitet` --
-- -------------------------------------------------------- -- -- Структура таблицы `disc` --
CREATE TABLE IF NOT EXISTS `disc` ( `num` int(11) NOT NULL auto_increment, `name` text collate utf8_bin NOT NULL, PRIMARY KEY (`num`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_bin AUTO_INCREMENT=1 ;
-- -- Структура таблицы `dni` --
CREATE TABLE IF NOT EXISTS `dni` ( `num` int(11) NOT NULL auto_increment, `name` text collate utf8_bin NOT NULL, PRIMARY KEY (`num`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_bin AUTO_INCREMENT=1 ;
-- -- Структура таблицы `fakult` --
CREATE TABLE IF NOT EXISTS `fakult` ( `num` int(11) NOT NULL auto_increment, `name` text collate utf8_bin NOT NULL, `decan` int(11) NOT NULL, PRIMARY KEY (`num`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_bin AUTO_INCREMENT=1 ;
-- -- Структура таблицы `group` --
CREATE TABLE IF NOT EXISTS `group` ( `num` int(11) NOT NULL auto_increment, `name` text collate utf8_bin NOT NULL, PRIMARY KEY (`num`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_bin AUTO_INCREMENT=1 ;
-- -- Структура таблицы `kaf` --
CREATE TABLE IF NOT EXISTS `kaf` ( `num` int(11) NOT NULL auto_increment, `name` text collate utf8_bin NOT NULL, `fakilt` int(11) NOT NULL, PRIMARY KEY (`num`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE
Популярное: Почему человек чувствует себя несчастным?: Для начала определим, что такое несчастье. Несчастьем мы будем считать психологическое состояние... Модели организации как закрытой, открытой, частично открытой системы: Закрытая система имеет жесткие фиксированные границы, ее действия относительно независимы... Как выбрать специалиста по управлению гостиницей: Понятно, что управление гостиницей невозможно без специальных знаний. Соответственно, важна квалификация... Организация как механизм и форма жизни коллектива: Организация не сможет достичь поставленных целей без соответствующей внутренней... ©2015-2024 megaobuchalka.ru Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. (425)
|
Почему 1285321 студент выбрали МегаОбучалку... Система поиска информации Мобильная версия сайта Удобная навигация Нет шокирующей рекламы |