суббота, 28 сентября 2013 г.

Вперед к основам: 1NF, 2NF, 3NF

Учитель сказал:
- Учиться и время от времени повторять изученное, разве это не приятно?

Конфуций, "Лунь Юй"

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

В 1970 - 1971 годах Эдгар Кодд впервые сформулировал требования к нормализованным структурам данных, названные им нормальная форма 1, 2 и 3 (1NF, 2NF, 3NF). С тех пор были определены еще несколько нормальных форм, которые предъявляют дополнительные требования к организации данных в реляционной БД; о них можно прочитать, например, в статье Википедии.

Однако, в большинстве случаев достаточно обеспечить соответствие реляционной структуры данных 3-ей нормальной форме (3NF). Далее будут рассмотрены первые три нормальные формы, примеры их нарушения, сопутствующие этому проблемы и способы их решения.

суббота, 14 сентября 2013 г.

INSERT для нескольких таблиц в Oracle SQL. Часть II

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

В многотабличных условных предложениях INSERT одной или нескольким частям INTO предшествует условие WHEN, которое и определяет, будут ли выполнены следующие за ним части INTO для каждой строки, возвращенной подзапросом.

среда, 4 сентября 2013 г.

INSERT для нескольких таблиц в Oracle SQL. Часть I

Понятно, что DELETE удалит 0 строк, а UPDATE обновит 0 строк, если ни одна из строк таблицы не удовлетворит условию WHERE в предложении DELETE или UPDATE. Но может ли INSERT вставить 0 строк?

Представьте ситуацию: INSERT в цикле срабатывает 100 раз, а в таблицу добавлено 60 строк. Возможно ли это?

Оказывается, возможно. INSERT может вставить 0 строк, если это INSERT с подзапросом SELECT, который возвращает 0 строк.