Сделай Сам Свою Работу на 5

Нормальная форма Бойса-Кодда (НФБК) (частная форма третьей нормальной формы)





СОЗДАНИЕТРИГГЕРА.

CREATE TRIGGER trigger_name ON table_name trigger_time trigger_event FOR EACH ROW trigger_stmt -данный запрос используется для создания триггера в общем виде.

trigger_time - вместо этого указывается одно из ключевых слов:

BEFORE - действия триггера производятся до выполнения изменения таблицы;

AFTER - действия триггера производятся после выполнения изменения таблицы;

trigger_event - показывает на какое событие должен реагировать триггер, значения могут быть такие:

INSERT - триггер привязан к событию вставки новой записи;

UPDATE - к событию обновления новой записи;

DELETE - к событию удаления записи;

 

trigger_stmt - представляет собой тело триггера. Для выполнения нескольких операторов внутри тела триггера, необходимо заключить все в блок BEGIN-END.

Приведем пример:

Пусть есть таблица table1 с одним полем FirstName. Создадим еще одну таблицу LogsName с двумя полями: ValueCh, DateChange с соответствующими типами строк дата и время. В эту таблицу триггер будет писать то, что поймает.

DELIMITER // CREATE TRIGGER myTrigger BEFORE INSERT ON `table1`

FOR EACH ROW BEGIN

INSERT INTO `LogsName` (`ValueCh`, `DateChange`) VALUES (NEW.`FirstName`, NOW()) ; END//

Особенность обработки ошибок:

 

ПОВТОРИТЬ ИНДЕКСЫ И СОЗДАНИЕ / / УДАЛЕНИЕ ТАБЛИЦ!



База данных - набор сведений, хранящихся некоторым упорядоченным способом. Можно сравнить базу данных со шкафом, в котором хранятся документы. Иными словами, база данных - это хранилище данных. Сами по себе базы данных не представляли бы интереса, если бы не было систем управления базами данных (СУБД).

Система управления базами данных - это совокупность языковых и программных средств, которая осуществляет доступ к данным, позволяет их создавать, менять и удалять, обеспечивает безопасность данных и т.д. В общем СУБД - это система, позволяющая создавать базы данных и манипулировать сведениями из них. А осуществляет этот доступ к данным СУБД посредством специального языка - SQL.

SQL - язык структурированных запросов, основной задачей которого является предоставление простого способа считывания и записи информации в базу данных.

Нормальная форма определяется как совокупность требований, которым должно удовлетворять отношение между множествами таблицы или таблиц базы данных.



· исключение некоторых типов избыточности;

· устранение некоторых аномалий обновления;

· разработка проекта базы данных, который является достаточно «качественным» представлением реального мира, интуитивно понятен и может служить хорошей основой для последующего расширения;

· упрощение процедуры применения необходимых ограничений целостности.

 

Первая нормальная форма


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

Например, есть таблица «Автомобили»:

 

Фирма Модели
BMW M5, X5M, M1
Nissan GT-R


Нарушение нормализации 1НФ происходит в моделях BMW, т.к. в одной ячейке содержится список из 3 элементов: M5, X5M, M1, т.е. он не является атомарным. Преобразуем таблицу к 1НФ:

Фирма Модели
BMW M5
BMW X5M
BMW M1
Nissan GT-R

 

Вторая нормальная форма


Отношение находится во 2НФ, если оно находится в 1НФ и каждый не ключевой атрибут неприводимо зависит от Первичного Ключа(ПК).

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

Например, дана таблица:

 

Модель Фирма Цена Скидка
M5 BMW 5%
X5M BMW 5%
M1 BMW 5%
GT-R Nissan 10%


Таблица находится в первой нормальной форме, но не во второй. Цену машины зависит от модели и фирмы. Скидка зависят от фирмы, то есть зависимость от первичного ключа неполная. Исправляется это путем декомпозиции на два отношения, в которых не ключевые атрибуты зависят от ПК.



 

Модель Фирма Цена
M5 BMW
X5M BMW
M1 BMW
GT-R Nissan

 

Фирма Скидка
BMW 5%
Nissan 10%

 


Третья нормальная форма


Отношение находится в 3НФ, когда находится во 2НФ и каждый не ключевой атрибут нетранзитивно зависит от первичного ключа. Проще говоря, второе правило требует выносить все не ключевые поля, содержимое которых может относиться к нескольким записям таблицы в отдельные таблицы.

Рассмотрим таблицу:

 

Модель Магазин Телефон
BMW Риал-авто 87-33-98
Audi Риал-авто 87-33-98
Nissan Некст-Авто 94-54-12

 

Таблица находится во 2НФ, но не в 3НФ.
В отношении атрибут «Модель» является первичным ключом. Личных телефонов у автомобилей нет, и телефон зависит исключительно от магазина.
Таким образом, в отношении существуют следующие функциональные зависимости: Модель → Магазин, Магазин → Телефон, Модель → Телефон.
Зависимость Модель → Телефон является транзитивной, следовательно, отношение не находится в 3НФ.
В результате разделения исходного отношения получаются два отношения, находящиеся в 3НФ:


Риал-авто 87-33-98
Риал-авто 87-33-98
Некст-Авто 94-54-12

Модель Магазин
BMW Риал-авто
Audi Риал-авто
Nissan Некст-Авто

 

Нормальная форма Бойса-Кодда (НФБК) (частная форма третьей нормальной формы)

 

 

Первичный ключ (primary key) представляет собой один из примеров уникальных индексов и применяется для уникальной идентификации записей таблицы. Никакие из двух записей таблицы не могут иметь одинаковых значений первичного ключа. Первичный ключ обычно сокращенно обозначают как PK (primary key).

Внешний ключ сокращенно обозначают как FK (foreign key).Как видно из рис.1, внешний ключ ссылается на первичный ключ таблицы themes, устанавливая однозначную логическую связь между записями таблиц themes и posts.

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

CREATE TABLE invoice (
inv_id INT AUTO_INCREMENT NOT NULL,
usr_id INT NOT NULL,
prod_id INT NOT NULL,
quantity INT NOT NULL,
PRIMARY KEY(inv_id),
FOREIGN KEY (usr_id) REFERENCES usr(usr_id)
ON UPDATE CASCADE
ON DELETE RESTRICT,
FOREIGN KEY (prod_id) REFERENCES product(prod_id)
ON UPDATE CASCADE
ON DELETE RESTRICT
) ENGINE=InnoDB CHARACTER SET=UTF8;

 

MySQL позволяет нам контролировать таблицы-потомки во время обновления или удаления данных в родительской таблице с помощью подвыражений: ON UPDATE и ON DELETE. MySQL поддерживает 5 действий, которые можно использовать в выражениях ON UPDATE и/или ON DELETE.

· CASCADE: если связанная запись родительской таблицы обновлена или удалена, и мы хотим чтобы соответствующие записи в таблицах-потомках также были обновлены или удалены. Что происходит с записью в родительской таблице, тоже самое произойдет с записью в дочерних таблицах. Однако не забывайте, что здесь можно легко попасться в ловушку бесконечного цикла.

· SET NULL:если запись в родительской таблице обновлена или удалена, а мы хоти чтобы в дочерней таблице некоторым занчениям было присвоено NULL (конечно если поле таблицы это позволяет)

· NO ACTION: смотри RESTRICT

· RESTRICT:если связанные записи родительской таблицы обновляются или удаляются со значениями которые уже/еще содержатся в соответствующих записях дочерней таблицы, то база данных не позволит изменять записи в родительской таблице. Обе команды NO ACTION и RESTRICTэквивалентны отсутствию
подвыражений ON UPDATE or ON DELETE для внешних ключей.

· SET DEFAULT:На данный момент эта команда распознается парсером, но движок InnoDB никак на нее не реагирует.

 

mysql> ALTER TABLE t1 CHANGE b b BIGINT NOT NULL;

mysql> ALTER TABLE t1 MODIFY b BIGINT NOT NULL;mysql> ALTER TABLE t2 ADD INDEX (d), ADD PRIMARY KEY (a);mysql> ALTER TABLE t2 DROP COLUMN c;

 

 

An index_col_name specification can end with ASC or DESC. These keywords are permitted for future extensions for specifying ascending or descending index value storage. Currently, they are parsed but ignored; index values are always stored in ascending order.

Рекомендуется делать индексы на колонки внешних ключей дабы исключить блокировки.

CONSTRAINT `fk_Subdivisions_Technique2`

FOREIGN KEY (`Technique`)

REFERENCES `fireservice1`.`Technique` (`TechniqueCode`)

ON DELETE NO ACTION

ON UPDATE NO ACTION

 








Не нашли, что искали? Воспользуйтесь поиском по сайту:



©2015 - 2024 stydopedia.ru Все материалы защищены законодательством РФ.