Нормальные формы (НФ) (#D, #C, Qty, Адрес) 1 НФ: Любой неключевой атрибут должен зависеть от всего ключа, и 2 НФ: не может зависеть от части ключа. (#D, #C, Qty) ( #C, Qty, Адрес) 3 НФ: (Т.Н.(табельный номер, ключ), Отдел, Адрес) Требование 3 НФ: В реляционной таблице не должно быть зависимостей от ключа. Декомпозиция: (Т.Н. , Отдел) (Т.Н. , Адрес) НФБК (BK): Ключи не должны пересекаться. (#П(Поставщик), #D(компонент), Имя, Кол-во) 4 НФ: (StudentId, ClassId, TeacherId) (StudentId, Name, …) (ClassId, Name, … ) Одному атрибуту соответствует множество значений других атрибутов. (Один ко многим) Требование: не должно быть внутри таблицы несколько отношений многих ко многим. Декомпозиция: (StudentId, ClassId) (TeacherId, ClassId) 5 НФ: Требование: таблица должна быть минимально необходимой, т.е. нельзя ее представить как декомпозицию более простых таблиц. Процесс нормализации всегда сводится к декомпозиции. SQL SQL не чувствителен к регистру. Пример запроса: SELECT * from T Выбрать все строки из таблицы Т Запрос отправляется на сервер, обрабатывается и возвращает данные клиенту. Тексты запросов SQL можно хранить на сервере вместе с данными (например, длинные запросы, которые можно вызывать короткими). (+)Удобство хранения запросов на сервере: не нужно обновлять все программы клиентов одновременно. (-) SQL является ограниченным языком. При этом есть необходимость расширения стандартного SQL (например, до PL/SQL для Oracle и др.) Команды CRUD(Create, Run, Update, Delete) для SQL (DML): Выборка: SELECT <что> <откуда> <условия> SELECT A, B, from Table WHERE B>0 Добавление: INSERT INTO Table (A,B) values (1,2) Удаление: DELETE from Table where A<B Обновление: UPDATE Table SET A=1 where B=0 SQL: -DML (Data Manipulation Language) -DDL (Date Definition Language) A B C Значения любого атрибута может быть либо инициализировано, либо нет. NULL – значение атрибута не установлено. CHAR(CHARACTER) – строковый тип, имеет максимальную длину. CREATE Table T AS (Name CHAR(80) PAD WITH BLANK) -Макс. Длина строки 80 символов, пустые (незаполненные) символы заполняются пробелами. VARCHAR хранит внутри длину строки. BIT (10) – битовый тип. BITVAR – битовая строка переменной длины. Целочисленные типы. NUMERIC – цифровое значение. DEC(DECIMAL) – десятичное число. SMALLINT – короткое целое. Вещественные числа: FLOAT REAL DOUBLE PRECISION Дата и время: DATE TIME TIMESTAMP INTERVAL Полная дата определяется как: dd.mm.yyyy.hh:mm:ss.dd BLOB(Binary Large Objects Byte) – байтовая последовательность. LARGE VAR CHAR – аналог. CBLOB – байтовая последовательность текста ограниченной длины. TEXT, MEMO. NATIONAL CHAR CP1251 – кодировка шрифта. CHAR (80) NO PAD – незаполненные символы не заполняются. CHAR (80) PAD(LEFT, RIGHT) SPACE – заполнить пробелами(слева, справа). || - соединение(объединение) строк SUBSTRUNG – выделить подстроку. (R,L)TRIM – обрезание пробелов (справа, слева). UPPER – перевод в верхний регистр LOWER – перевод в нижний регистр POS – вхождение в позицию строки. LEN(S) – длина строки. LIKE – сравнение с образцом. Пример: SELECT * from T where A LIKE ‘AB%’ % или * означает подстроку любой длины, в том числе нулевой. При описании временного типа можно использовать суффикс WITH TIMEZONE. Существует возможность конвертации строки даты и времени или ее части во временной тип. Временные типы доступны для вычитания: интервал=дата2-дата1. К временным типам применимы операции сложения, вычитания, умножения на число. CREATE TABLE Tablename AS (Name char(80) DEFAULT ‘AB’, Id int) //Создать таблицу T Tablename с доменами различных типов данных, имеющими значения по умолчанию. NOT NULL(NULL, VALUE (IS) NOT NULL), – значение не может быть неинициализированным. IS NULL – неинициализировано. UNIQUE – уникальное значение. Временная таблица удаляется по завершении сеанса с пользователем.