Перейти на главную страницу
D1 ={1,2,5}, D2={a,b}, D3={C,D,E}. Их декартово произведение:
D1D2D3={(1, a, C), (1, a, D), (1, a, E), (1, b, C), (1, b, D), (1, b, E),
(2, a, C), (2, a, D), (2, a, E), (2, b, C), (2, b, D), (2, b, E),
(5, a, C), (5, a, D), (5, a, E), (5, b, C), (5, b, D), (5, b, E)}. Любое подмножество этого множества представляет собой отношение.
Домен – это область определения атрибута объекта (столбца таблицы).
Кортеж, или запись – это строка таблицы.
РА представляет собой математический аппарат для работы с объектами-отношениями (таблицами). Кроме РА, существуют также теории реляционного исчисления на доменах и реляционного исчисления на кортежах, эквивалентные теории РА.
Операндами и результатами операций в РА являются отношения (таблицы).
Схема отношения – список столбцов таблицы с их именами и
типами.
Пример реляционной модели “Поставка деталей” (подчеркнуты ключевые поля):
ПОСТАВЩИК (ПИмя, ПНомер, Город)
КЛИЕНТ (КИмя, КНомер, Город)
ПОСТАВКА (ДНомер, ПНомер, КНомер, Дата, Колво)
proj список_полей (Таблица) – выполняется в два этапа:
сначала выбираются нужные столбцы,
затем вычеркиваются повторяющиеся строки.
proj ПИмя, Город (ПОСТАВЩИК)
sel условие (Таблица)
Из таблицы выбираются только те строки, которые отвечают заданному условию. Для формирования сложных условий используются логические связки
AND, OR, NOT. Строки-константы задаются в кавычках.
Схема таблицы-результата совпадает со схемой исходной таблицы.
Пример: найти все детали модели МС550:
sel ДМодель=”МС550”(ДЕТАЛЬ)
Таблица1 join Таблица2
Для того чтобы результат существовал, нужно, чтобы операнды имели одноименные поля. В схему таблицы-результата входят все поля из обеих таблиц, одноименные поля входят только один раз.
Операция выполняется по следующим правилам: каждая строка первой таблицы соединяется с каждой строкой второй таблицы, если они имеют одинаковые значения в одноименных полях. Соединение может выполняться по одному полю или по нескольким полям.
proj ПИмя, КИмя (ПОСТАВЩИК join КЛИЕНТ)
Таблица1 union Таблица2
Строка попадает в результирующую таблицу, если она присутствует или в первом, или во втором операнде. Дубликаты в результат не включаются.
Пример: напечатать названия городов, в которых есть либо Поставщик, либо Клиент (хотя бы один).
proj Город (ПОСТАВЩИК) union proj Город (КЛИЕНТ)
Таблица1 intersection Таблица2
Строка попадает в результирующую таблицу, если она присутствует как в первом, так и во втором операнде.
Пример: напечатать названия городов, в которых есть и Поставщик, и Клиент.
proj Город (ПОСТАВЩИК) intersection proj Город (КЛИЕНТ)
Таблица1 difference Таблица2
Строка попадает в результирующую таблицу, если она присутствует в первом, но не присутствует во втором операнде.
Пример: напечатать названия городов, в которых есть Поставщики, но нет Клиентов.
proj Город (ПОСТАВЩИК) difference proj Город (КЛИЕНТ)
Таблица1 product Таблица2
В схему результирующей таблицы входят все поля обоих операндов. Поскольку имена полей могут совпадать, используются составные имена полей: Имя_таблицы.Имя_поля.
Результат формируется следующим образом: каждая строка первой таблицы сцепляется с каждой строкой второй таблицы.
proj ПИмя, КИмя (ПОСТАВЩИК product КЛИЕНТ)
Таблица1 division Таблица2
Для применения этой операции требуется, чтобы схема второго операнда была подмножеством схемы первого операнда. В схему результата попадают столбцы первой таблицы, которых нет во второй таблице.
Результат формируется следующим образом: строка попадает в результат, если в первой таблице она сцеплена со всеми строками второй таблицы. Например:
Таблица1 F1 F2 F3 A 1 z
B 1 z C 1 z
A 2 d B 2 d
A 5 q C 5 q
|
Таблица 2 F1 A B C |
Таблица1 division Таблица2 F2 F3 1 z
|
proj ПНомер, КНомер (ПОСТАВКА)
division
proj КНомер (sel Город= “Москва”(КЛИЕНТ))
Пусть схема таблицы разбита на 3 непересекающиеся части: H, J, K. Если K функционально зависит от J, то выполняется утверждение:
когда каждое неключевое поле таблицы связано полной функциональной зависимостью с первичным ключом.
Заказы (Номер_заказа, Код_товара, Описание_товара, Количество)
Описание_товара функционально зависит от Код_товара, т.е, от части ключа. Применяя теорему Хита, разобьем эту таблицу на 2 проекции:
Заказы2 (Номер_заказа, Код_товара, Количество)
Товары (Код_товара, Описание_товара)
Если товар пока не входит ни в какой заказ, то в исходной таблице его хранить нельзя – такие записи называют присоединенными.
Сотрудники (Табельный_номер, ФИО, Номер_отдела, Название_отдела)
Название_отдела функционально зависит от Номер_отдела т.е, от неключевого поля. Применяя теорему Хита, разобьем эту таблицу на 2 проекции:
Сотрудники2 (Табельный_номер, ФИО, Номер_отдела)
Отделы (Номер_отдела, Название_отдела)
Примечание: Обычно на практике достаточно ограничиться таблицами в 3НФ, остальные нормальные формы нарушаются редко и представляют только теоретический интерес.
Нормальная форма Бойса-Кодда- таблица находится в НФБК тогда и только тогда, когда любая функциональная зависимость сводится к полной функциональной зависимости от ключа-кандидата (т.е., нет функциональных зависимостей ключевых полей от неключевых).
Пример нарушения НФБК: рассмотрим таблицу (предполагается, что нет одинаковых городов):
Адреса (Индекс, Город, Улица)
Город функционально зависит от Индекс.
Разбивать такую таблицу на 2 проекции не стоит. Лучше смириться с таким нарушением.
Сотрудник
Фамилия |
Знание_языка |
Имя_ребенка |
Смит |
Английский |
Джон |
Смит |
Английский |
Мери |
Смит |
Немецкий |
Джон |
Смит |
Немецкий |
Мери |
Фамилия |
Знание_языка |
|
Фамилия |
Имя_ребенка |
Смит |
Английский |
|
Смит |
Джон |
Смит |
Немецкий |
|
Смит |
Мери |
3. Язык SQL (произносится “эс ку эль”, англоязычные программисты и русскоязычные снобы от программирования называют его “сиквэл”)
1970 г. – д-р Э.Ф.Кодд публикует статью “Реляционная модель больших банков совместно используемых данных”;
1974 г. – публикация статей о SEQUEL;
1979 г. – выпущена реляционная СУБД компании ORACLE;
1981 г. – Relational Technology выпускает СУБД Ingres;
1983 г. – IBM выпускает СУБД DB2;
1986 г. – предложен стандарт ANSI-SQL, выпущена СУБД Sybase;
1987 г. – ISO принимает стандарт SQL;
1988 г. – Microsoft и Ashton-Tate выпускают SQL Server под OS/2;
1989 г. – создается консорциум SQL Access Group;
1992 г. – принят стандарт SQL-92;
1993 г. – внедрение протокола ODBC.
включает всевозможные команды создания (CREATE), удаления (DROP) и изменения структуры (ALTER) объектов, таких, как таблицы (TABLE), представления (VIEW), триггеры (TRIGGER), пользователи (USER) и т.п.
CREATE TABLE k_firm
(firm_num NUMERIC(6) IDENTITY PRIMARY KEY,
firm_name VARCHAR(100) NOT NULL,
firm_addr VARCHAR(100)
);
На уровне определения таблиц осуществляется декларативная политика ссылочной целостности (Declarative Referential Integrity) с помощью внешних ключей. Декларативная ссылочная целостность требует, чтобы в поле внешнего ключа можно было вводить только такие значения первичного ключа, которые присутствуют в родительской таблице.
CREATE TABLE k_contract
(contract_num NUMERIC(6) IDENTITY PRIMARY KEY,
contract_date DATETIME DEFAULT GETDATE(),
contract_type CHAR(1)
CHECK (contract_type IN ('A','B','C')),
firm_num NUMERIC(6) NOT NULL,
CONSTRAINT fk_contract_firm_num FOREIGN KEY (firm_num)
REFERENCES k_firm (firm_num)
);
DML - data manipulation language (язык манипулирования данными)
включает команды INSERT, DELETE, UPDATE.
Команда добавления строк в таблицу:
INSERT [INTO] имя_таблицы [(список_полей)]
VALUES (список_значений)
Команда обновления строк таблицы:
UPDATE имя_таблицы
SET поле1=выражение1 [,... , полеN=ВыражениеN]
[WHERE условие]
Команда удаления строк таблицы:
DELETE [FROM] имя_таблицы [WHERE условие]
содержит огромную команду SELECT, имеющую возможности:
До момента подтверждения транзакции все измененные данные записываются в журнал транзакций, и только после фиксации транзакции данные переносятся собственно в таблицы.
содержит команды предоставления (GRANT) и отнимания (REVOKE) прав доступа, а также запрета доступа (DENY).
предоставление прав на выборку и изменение данных в таблице k_contract пользователю public:
GRANT SELECT, UPDATE ON k_contract TO public
запрет удаления данных из таблицы k_contract пользователю public:
DENY DELETE ON k_contract FROM public
Каждая СУБД имеет свой собственный “диалект” SQL, включающий, кроме основ SQL, команды управления (циклы, условия), функции и пр. средства:
ORACLE – PL/SQL,
MS SQL Server – Transact SQL,
и т.п.
Современные СУБД имеют очень сложную физическую организацию, структура которой обычно скрыта от программистов, разрабатывающих приложения баз данных, а тем более от пользователей. Но, так или иначе, полезно представлять себе, а как же выглядят данные на физическом уровне. В этом вопросе рассматривается один из наиболее распространенных принципов организации данных.
Данные между внешней и оперативной памятью передаются блоками. Блоки имеют фиксированный размер, обычно степень двойки. Обычно в блоке помещается несколько записей. Блок данных считывается в область оперативной памяти, называемую буфером файлового блока.
В-деревья
У сбалансированного (balanced) дерева каждый лист имеет одинаковое количество предков, иными словами, все листья расположены на одном уровне.
B-деревья относятся к индексно-последовательным структурам.
Они не имеют областей переполнения.
Блоки данных хранятся в листьях дерева. Записи в блоках данных всегда упорядочены.
Остальные вершины содержат индексные блоки
Каждая индексная запись содержит значение минимального ключа в поддереве, которое исходит из данной вершины, и указатель на это поддерево.
Основные свойства B-деревьев:
Первоначально дерево имеет вид
Количество блоков, которое необходимо просмотреть при поиске =
max уровень дерева –1.
Добавление записей.
Для включения записи сначала проводим процедуру поиска блока данных, в который должна быть помещена запись. Если в блоке есть свободное место, то вставляем запись и, возможно, передвигаем оставшиеся записи. Если же в блоке нет свободного места, нужно создать новый блок. После этого некоторые записи передаются из старого блока в новый, чтобы оба были заполнены более чем наполовину. Затем изменяем индексные блоки.
Теперь добавляем запись AY. Она должна быть помещена в D2, но в нем нет места. Формируем новый блок D8 и переносим туда часть записей из D2, чтобы оба блока были заполнены более чем наполовину. Добавляем индексную запись в индексный блок I11.
Теперь включим записи CE и DT. CE добавляется в D3. DT также должна быть добавлена в D3, но там нет места. Создаем блок D9, перераспределяем записи данных.
В блоке I12 нет места для указателя на D9, поэтому создаем индексный блок I14, перераспределяем записи. Теперь в блоке I21 нет места для указателя на блок I14, создаем блок I22. У дерева не может быть 2 корня, создаем новый корневой блок I31. Дерево существенно изменило свой вид.
Реляционная модель данных. Основные понятия: отношение, кортеж, домен. Реляционная алгебра (РА)
24 09 2014
1 стр.
14 10 2014
3 стр.
Цель: Получить навыки создания общей реляционной базы данных для использщования в сетевом пространстве
13 10 2014
1 стр.
Целью настоящего документа является напомнить о разработках относительно анализа информации Базы данных по сортам растений упов-rom (упов-rom)
11 10 2014
4 стр.
Трансферт – это унифицированная настраиваемая программа для передачи (конвертирования) данных из одной базы данных (БД) в другую
12 10 2014
1 стр.
Для создания резервной копии базы данных необходимо в программе Microsoft sql server Management Studio в левой части окна выбрать требуемую базу данных. Затем, щелчком правой кнопк
10 10 2014
1 стр.
РД. 45. 128-2000 «Сети и службы передачи данных». Основные термины и их определения: пд – передача данных, оод – оконечное оборудование данных, акд – аппаратура окончания канала да
14 12 2014
1 стр.
Электронно-оптические и оптико-электронные приборы. Определение и классификация приборов эот
12 10 2014
1 стр.