Вторая нормальная форма (2НФ)



Мы поможем в написании ваших работ!


Мы поможем в написании ваших работ!



Мы поможем в написании ваших работ!


ЗНАЕТЕ ЛИ ВЫ?

Вторая нормальная форма (2НФ)



Вторая нормальная форма требует, чтобы все поля таблицы зависели от первичного ключа. Т.е первичный ключ (pk) должен однозначно определяет запись и не должен быть избыточным. Те поля, которые зависят от части первичного ключа должны быть выделены в отдельную таблицу.

Пример приведения ко второй НФ таблицы УниверситетРис.17.

Факультет

          Код_Фак Факультет
Университет         ММ МехМат
Код_Фак Код_Каф Факультет Кафедра   ФФ Физический
ММ МА МехМат Мат.анализ   ВМК Вычисл. мат
ММ ДУ МехМат Диф.уравн.   ЭК Экономический
ФФ М Физический Магнетизма      
ФФ КТ Физический Квант.теории   Кафедра  
ВМК МА Вычисл. Мат. Мат.анализ   Код_Каф Кафедра
ВМК ДУ Вычисл. Мат. Диф.уравн   МА Мат.анализ
ЭК ЭП Экономический Экон.промыш.   ДУ Диф.уравн.
ЭК БУ Экономический Бух.учета   М Магнетизма
ЭК Н Экономический Народонаселения   КТ Квант.теории
          ЭП Экон.промыш.
    Рис. 17.     БУ Бух.учета
          Н Народонаселения

Структура БД

Для того чтобы связать таблицы Факультет и Кафедранеобходимо ввести дочернею (связующую) таблицу Т1Рис.18.

       
 
   
 


Факультет Т1

Код_Фак Факультет   Код_Фак Код_Каф
ММ МехМат   ММ МА
ФФ Физический   ММ ДУ
ВМК Вычисл. мат   ФФ М
ЭК Экономический   ФФ КТ
Кафедра     ВМК МА
Код_Каф Кафедра   ВМК ДУ
МА Мат.анализ   ЭК ЭП
ДУ Диф.уравн.   ЭК БУ
М Магнетизма   ЭК Н
КТ Квант.теории      
ЭП Экон.промыш.      
БУ Бух.учета      
Н Народонаселения      

Рис. 18

 

Внимание

Если таблица находиться в 1НФ и первичным ключом является одно поле, то таблица уже находиться во 2НФ.


Третья нормальная форма (3НФ)

Третья нормальная форма требует, чтобы в таблице не имелось зависимостей между не ключевыми полями, т.е. чтобы значение одного поля не зависело от значения другого поля.

 

Пример: Имеется таблица склад, в которой учитывается вид товара, количество каждого товаров, цена единицы товара, и стоимость каждого вида товара как произведения количества на цену единицы товара. Рис. 19

Поле «Стоимость» является лишним информационным звеном в таблице, так как зависит от поля «Колич.» и может быть всегда рассчитано. Поэтому устраним зависимость приведя таблицу к 3НФ Рис. 20.

 

Склад

Товар Колич. Цена за ед. Стоимость   Товар Колич. Цена за ед.
Сахар   Сахар
Рис   Рис
Масло   Масло
Сыр   Сыр

Рис. 19. Рис. 20.

 

Нормализация базы данных выгодна со многих точек зрения. Далее перечислены некоторые из основных преимуществ, которые она дает:

  • Лучшая общая организация базы данных
  • Сокращение избыточности информации
  • Непротиворечивость информации внутри базы данных
  • Более гибкий проект базы данных

 

Примечание:

На практике не всегда возможно получить полностью нормализованную БД. Иногда к этому даже и не стремятся с силу различных особенностей построения БД: например когда число таблиц велико, то удержать в памяти всю структуру БД не позволяет возможность человеческого восприятия. Или если число повторяющихся групп известно заранее и никогда меняться не будет, по приведение таблицы к 1НФ по повторяющимся группам необязательно.

 


Пример разработки РБД

Пусть необходимо разработать БД где будут учтены: товары, сорта товаров, количество товара, цена товара, дата поступления, дата покупки, фирмы поставщики товаров, покупатели….

 

 

Разделим информацию по сущностям.

 

Первая сущность, (стержневая) назовем ее – «Поставщик», включает в себя следующие объекты.

· Название фирмы поставщика.

· Факс фирмы.

 

Втораясущность (стержневая) назовем ее – «Товар», включает в себя следующие объекты.

· Вид товара.

· Сорт товара.

 

Третья сущность назовем ее – «Клиенты», включает в себя следующие объекты.

· Название клиента.

 

Учитывая назначение БД, нормализуем сущности, и с учетом обеспечения целостности БД, составим структуру реляционных отношений.

 

 

  Поставщик            
    PK_Ф          
  Фирма            
  Факс   Склад       Учет
      PK_Скл     FK_Скл
  Товар   FK_Ф   Клиенты FK_K
PK_T FK_Т   PK_K   Дата
  Вид_товара FK_С   Клиент   Колич
      Дата        
  Сорт   Колич        
  PK_C   Цена_за_ед        
  Сорт_товара            
  FK_T            
               

 

PК_Ф, PK_T, PK_C, PK_Скл, PK_K,первичные ключи в своих таблицах.

FК_Ф, FK_T, FK_C, FK_Скл, FK_K,внешние ключи.

 

В таблице «Склад», учитывается: какие товары, какого сорта, каким поставщиком, когда и в каком количестве были поставлены на склад, а так же цена за единицу товара.

 

В таблице «Учет» учитывается: когда, и в каком количестве, клиент приобрел товар. А наличие связи PK_Скл → FK_Скл сразу определяет полную характеристику приобретенного товара (вид, сорт, цена….).

Ниже приведена структура БД в заполненных таблицах.


СТРУКТУРА БАЗЫ ДАННЫХ

(в заполненных таблицах)

 

       
   
 

  Поставщик     Товар     Сорт       Клиенты
PK_Ф Фирма Факс   PK_T Вид_товара   PK_C Сорт_товара FK_T   PK_K Клиент
Викам 456-34-22   Яблоки   Голден   Буфет А…
Зенит 233-45-76   Груши   Рихард   Ресторан Н…
Грант 467-12-31   Апельсины   Шафран   Буфет С…
Зенит 748-18-66         Лада   Столовая 1
              Велеса   Ресторан У…
              Нэвел   Столовая 2
              Браун      
              Валенсия      
                       
      Склад             Учет  
FK_Ф FK_Т FK_С Дата Колич Цена_за_ед PK_Скл   FK_Скл FK_K Дата Колич  
02.09.05   20.08.05  
23.08.05   09.09.05  
29.08.05   20.08.05  
04.09.05   01.10.05  
15.08.05   22.09.05  
26.09.05   01.10.05  
17.09.05   20.08.05  
30.10.05   10.09.05  
22.08.05   01.10.05  
05.09.05   22.09.05  
27.08.05   01.09.05  
04.09.05   03.09.05  
02.10.05   09.09.05  
                20.08.05  
                09.09.05  
                10.09.05  

 

  Поставщик                      
  PK_Ф            
Таблицы «Товар» и «Сорт», можно объединить и назвать «Товар». В этом случае БД упрощается и принимает более компактный вид. Однако, это является нарушением 2 НФ, хотя и незначительным для данной БД.  

       
  Фирма                      
  Факс   Склад       Учет          
      PK_Скл     FK_Скл          
      FK_Ф   Клиенты FK_K          
    FK_Т   PK_K   Дата          
      Дата   Клиент   Колич          
      Колич                  
  Товар   Цена_за_ед                  
  PK_T                      
  Вид_товара                      
  Сорт_товара                      
                         
    Поставщик     Товар       Клиенты    
  PK_Ф Фирма Факс   PK_Т Товар Сорт   PK_K Клиент    
  Викам 456-34-22   Яблоки Голден   Буфет А…    
  Зенит 233-45-76   Яблоки Рихард   Ресторан Н…    
  Грант 467-12-31   Яблоки Шафран   Буфет С…    
  Зенит 748-18-66   Груши Лада   Столовая 1    
          Груши Велеса   Ресторан У…    
          Апельсины Нэвел   Столовая 2    
          Апельсины Браун          
          Апельсины Валенсия          
                       
        Склад           Учет    
  FK_Ф FK_Т Дата Колич Цена_за_ед PK_Скл   FK_Скл FK_K Дата Колич  
  02.09.05   20.08.05  
  23.08.05   09.09.05  
  29.08.05   20.08.05  
  04.09.05   01.10.05  
  15.08.05   22.09.05  
  26.09.05   01.10.05  
  17.09.05   20.08.05  

Язык SQL

Язык SQL является инструментом, предназначенным для обработки (чтения, удаления, изменения) данных, содержащихся в БД.

SQL - это сокращенное название языка запросов (Structured Query Language). Как следует из названия, SQL является языком программирования, который применяется для организации взаимодействия пользователя с базой данных.

Достоинства SQL

• независимость от конкретных СУБД;

• переносимость с одной вычислительной системы на другую;

• наличие стандартов;

• реляционная основа;

• высокоуровневая структура;

• возможность выполнения специальных интерактивных запросов:

• обеспечение программного доступа к базам данных;

• возможность различного представления данных;

 

Инструкция SELECT … FROM

По этой инструкции возвращаются данные из базы данных в виде набора записей.

Простейшая инструкция SELECT … FROM

Синтаксис

SELECT имена полей

FROMимена таблиц;

 

 

Элемент Описание
имена полей Имена полей, из которых должны быть отобраны данные. Если включить несколько полей, они будут извлекаться в указанном порядке.  
имена таблиц Имена одной или нескольких таблиц, которые содержат отбираемые данные.

 


1. Простейший запрос для одной таблицы.

SELECT поле1, поле2,…,поле7

FROM таблица;

 

SELECT * (*-означает, что будут показаны все поля)

FROM таблица;

 

2. Простейший запрос для двух таблиц

SELECT таблица1.поле1, таблица2.поле1, … , таблица1.полеN

FROM таблица1, таблица2;

 

Примечание: Имя таблицы необходимо применять в том случае: если имена полей в таблицах одинаковы.

 

 

Использование псевдонимов таблиц

SELECT таблица1.поле1, таблица2.поле1 SELECT T1.поле1, T2.поле1

FROM таблица1, таблица2; FROM таблица1 T1, таблица2 T2;

 

Использование псевдонимов полей.

 

SELECT поле1, поле2, поле3 AS Фамилия

FROM таблица;

Внимание!!!

Имена полей, которые содержат пробелы или знаки препинания, необходимо заключать в квадратные скобки ([ ]). Например

SELECT [Год рождения] SELECT [Год рождения] AS Год

Пример:Простейший запрос для одной таблицы с использованием псевдонима поля.

 

SELECT [Фамилия студента] AS Фамилия, Оценка

FROM Студенты;

Студенты

Фамилия студента Ак.Гр Оценка   Фамилия Оценка
Смирнов   Смирнов
Михайлов   Михайлов
Синицын   Синицын
Панов   Панов

Применение вычислений в полях.

Арифметические выражения используются для расчета значений вычисляемых полей. При формировании вычисляемых полей следует придерживаться правил написания выражений. Выражение пишется вместо имени поля.

 

Пример

SELECT Товар, Количество * Цена

FROM Товары;

Товары

Товар Количество Цена   Товар ???????
Шампанское   Шампанское
Торт   Торт
Кока-кола   Кока-кола
Фанта   Фанта
Пиво   Пиво

Если вычисляемому столбцу необходимо присвоить имя, то запрос выглядит следующим образом:

 

SELECT Товар, Количество * ЦенаAS Стоимость

FROM Товары;

Товары

Товар Количество Цена   Товар Стоимость
Шампанское   Шампанское
Торт   Торт
Кока-кола   Кока-кола
Фанта   Фанта
Пиво   Пиво

Инструкция SELECT...INTO…FROM

До сих пор инструкция SELECT создавала виртуальную таблицу, которая не сохранялась в базе данных. Для создания реальной таблицы как результат обработки существующих таблиц, используется запросSELECT...INTO…FROM

Синтаксис

SELECT поле1, поле2 ,...

INTO новая Таблица

FROM Таблица1,Таблица2…,

Ниже перечислены аргументы инструкции SELECT...INTО ….FROM:

Элемент Описание
поле1, поле2…………. Имена полей, которые следует скопировать в новую таблицу.  
Новая Таблица…….. Имя создаваемой таблицы. Это имя должно удовлетворять стандартным правилам именования. Если новая Таблица совпадает с именем существующей таблицы, возникает перехватываемая ошибка.
   
Таблица1,Таблица2…, Имена существующих таблиц, из которой отбираются записи. Это может быть одна таблица, несколько таблиц или запрос.

Дополнительные сведения

Запрос на создание таблицы можно использовать для архивирования записей, создания резервных копий таблицы, копий для экспорта в другую базу данных, а также в качестве основы отчета, отображающего данные за конкретный период времени. Например, можно создать отчет «Ежемесячные продажи по областям», выполняя каждый месяц один и тот же запрос на создание таблицы.

 

Примечания

· При создании таблицы поля в новой таблице наследуют типы данных и размеры базовых полей; никакие другие свойства таблиц и полей не передаются.

· Чтобы узнать, какие записи будут отобраны при выполнении запроса на создание таблицы, сначала просмотрите результаты инструкции SELECT, использующей те же условия отбора.

Пример

SELECT Фамилия, Оклад

INTO Отчет

FROM Сотрудники;

Сотрудники Отчет

Фамилия Оклад Отдел   Фамилия Оклад
ЗИМЕНС   ЗИМЕНС
ИВАНОВ   ИВАНОВ
ИГЛА   ИГЛА
ИНСТРУМЕНТОВ   ИНСТРУМЕНТОВ

 

Предложение ORDER BY

Сортирует записи, полученные в результате запроса, в порядке возрастания или убывания на основе значений указанного поля или полей.

Синтаксис

SELECT списокПолей
FROM таблица
WHERE условиеОтбора
ORDER BY поле1 [ASC | DESC ] [, поле2 [ASC | DESC ]] …..

поле1, поле2 ……. Имена полей, по которым сортируются записи.

ASC ……………….. сортировки по возрастанию (от «A» до «Я» и от 0 до 9).

DESC ……………… сортировки по убыванию (от «Я» до «А» и от 9 до 0).

 

По умолчанию используется порядок сортировки по возрастанию (от «A» до «Я» и от 0 до 9).

Предложение ORDER BY может содержать несколько полей. Сначала записи сортируются по первому полю в списке ORDER BY. Затем записи, имеющие совпадающие значения в первом поле, сортируются по второму полю и т. д.

Предложение ORDER BY является необязательным. Однако оно необходимо для отображения данных в порядке сортировки.

Обе приведенные ниже инструкции SQL одинаково сортируют записи по фамилиям сотрудников:

 

SELECT Фамилия SELECT Фамилия

FROM Сотрудники FROM Сотрудники
ORDER BY Фамилия ASC; ORDER BY Фамилия;

 

Пример(Сортировка по Окладу, а затем по Фамилии)

 

SELECT Фамилия, Оклад

INTO Отчет

FROM Сотрудники
ORDER BY Оклад DESC, Фамилия;

Сотрудники Отчет

Фамилия Оклад   Фамилия Оклад
ЗИМЕНС   ИСАЕВ
ИВАНОВ   ИСАЧКИН
ИГЛА   КАМЕНЕВ
ИНСТРУМЕНТОВ   ИВАННИКОВ
ИСАЕВ   ИВАНОВ
ИСАЧКИН   КАРТАШЕВ
КАМЕНЕВ   КАШОЛКИН
КАПУСТИН   ИГЛА
КАРЕВ И.А   ИНСТРУМЕНТОВ
КАРТАШЕВ   КАРЕВ И.А
КАШОЛКИН   КАПУСТИН

Предложение WHERE

Определяет, какие записи из таблиц, перечисленных в предложении FROM, следует включить в результат выполнения инструкции SELECT

Синтаксис

SELECT имена полей

FROM имена таблиц

WHEREУсловие Отбора;

Элемент Описание
Условие Отбора Выражение, которому должны удовлетворять записи, включаемые в результат выполнения запроса.

 

Предложение WHERE не является обязательным, однако, если оно присутствует, то должно следовать после предложения FROM.

 

Операции отношения

Простой отбор. Операции отношения ( =, <, >, <>, >=, <= )

Допускается использование различных операций отношения.

= равно,

< меньше,

> больше,

<= меньше или равно,

>=больше или равно,

<> не равно.

 

1. Следующая инструкция SQL отбирает всех сотрудников, зарплата которых превышает 10 000 рублей:

SELECT Фамилия, Оклад

FROM Сотрудники

WHERE Оклад > 10000;

 

2. Отобрать всех сотрудников отдела продаж

SELECT Фамилия

FROM Сотрудники

WHERE Отдел = “Продажи”;

Пример

SELECT Фамилия, Оклад

FROM Сотрудники

WHERE Оклад >= 4000

Сотрудники

Фамилия Оклад Отдел   Фамилия Оклад
ЗИМЕНС   ЗИМЕНС
ИВАНОВ   ИВАНОВ
ИГЛА      
ИНСТРУМЕНТОВ      



Последнее изменение этой страницы: 2016-08-26; Нарушение авторского права страницы; Мы поможем в написании вашей работы!

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 3.229.142.91 (0.012 с.)