Информацию о том, как установить эту СУБД, вы найдете в этой заметке. Итак, чем же я руководствовался при проектировании схемы Нормальные формы. Процесс устранения избыточности и ликвидации противоречивости базы данных называется нормализацией. Выделяют так называемые нормальные формы, из которых на практике редко кто помнит больше первых трех. Грубо говоря, таблица находится в первой нормальной форме 1. НФ, если на пересечении любой строки и любого столбца в таблице находится ровно одно значение. В современных РСУБД это условие всегда выполняется. Даже если СУБД поддерживает множества или массивы, на пересечении строки и столбца хранится ровно одно значение типа множество или массив. Но в таблице user varchar1. В 1. НФ может быть только две сроки alex 1. Вторая нормальная форма 2. НФ означает, что таблица находится в первой нормальной форме, и каждый неключевой атрибут неприводимо зависит от значения первичного ключа. Неприводимость означает следующее. Если первичный ключ состоит из одного атрибута, то любая функциональная зависимость от него неприводима. Если первичный ключ является составным, то в таблице не может быть атрибута, значение которого однозначно определяется значением подмножества атрибутов первичного ключа. Таблица находится в третьей нормальной форме, если она находится в 2. НФ и ни один неключевой атрибут не находится в транзитивной функциональной зависимости от первичного ключа. Например, рассмотрим таблицу employee varchar1. Очевидно, что она находится в 2. НФ. Но телефон отдела находится в транзитивной функциональной зависимости от имени сотрудника, так как сотрудник однозначно задает отдел, а отдел однозначно задает телефон отдела. Для приведения таблицы в 3. НФ нужно разбить ее на две таблицы employee department и departmnet phone. Легко видеть, что нормализация уменьшает избыточность базы данных и препятствует внесению случайных ошибок. Например, если оставить таблицу из последнего примера в 2. НФ, то можно по ошибке прописать одному и тому же отделу разные телефоны. Или рассмотрим компанию с пятью отделами и 1. Если у отдела поменялся номер телефона, то для его обновления в базе данных в случае 2. НФ потребуется просканировать 1. НФ только пять. Как я уже отмечал, есть и более строгие нормальные формы, но на практике обычно используются только первые три. Отношение один ко многим. На приведенной диаграмме можно заметить, что каждый исполнитель относится к какой то стране, и каждый альбом принадлежит какому то исполнителю. Это и есть отношение один ко многим. Например, к одной стране относится множество исполнителей, и каждый исполнитель может иметь множество альбомов. Но приведенная схема, например, запрещает одному альбому принадлежать множеству исполнителей. Хотя в реальной жизни, конечно, это возможно, например, в случае со сборниками. Для моделирования такого типа отношения в каждом альбоме указывается id исполнителя, и в каждом исполнителе указывается id страны. Понятное дело, мы не просто пишем туда какую то циферку, а возлагаем ответственность по контролю ссылочной целостности на нашу СУБД ALTERTABLE albums ADDCONSTRAINT fk. Я не вижу причин не проверять ссылочную целостность, если только вы не пишите супер пупер высоконагруженный проект, у которого исполнители хранятся на одном сервере, а альбомы на другом. В противном случае вас ждет много часов увлекательной отладки вашего приложения в ночь с субботы на воскресенье, потому что как то так получилось, что кто то создал альбом с несуществующим исполнителем. Жанры и страны в приведенной схеме иногда еще называют словарями. Это сравнительно небольшие таблицы, состоящие из двух столбцов id и названия. Если, например, мы захотим переименовать страну Russia в Russian Federation, нам придется поменять всего лишь одну строчку в таблице countries, а не править кучу строк в таблице artists, что может привести к очень большому количеству дисковых операций. Кроме того, если требуется отобразить в диалоге создания нового исполнителя выпадающий список с выбором страны, нам не придется делать дорогих группировок по таблице artists, достаточно сделать простую выборку из countries. Отношение многие ко многим. Один альбом, как правило, содержит множество песен. Кроме того, нет веских причин, почему одна песня не может находится сразу в нескольких альбомах. Здесь мы имеем место с типичным отношением многие ко многим. Оно моделируется путем введения дополнительной таблицы. В нашем примере эта таблица называется albums. Первичный ключ в этой таблицы состоит из двух внешних ключей album. Теперь нетрудно с помощью пары joinов получить все песни, входящие в данный альбом или все альбомы, в которые входит заданная песня. Кроме того, ничто не мешает завести в связующей таблице дополнительные столбцы. Например, столбец, хранящий номер трека, под которым песня входит в заданный альбом. На практике связаны могут быть не две, а три и более таблиц. Например, некий пользователь сделал некий заказ, выбрав указанный способ оплаты, адрес и способ доставки пожалуйста, пять таблиц как с куста. Отношение родитель потомок или общее частноеИсполнители могут быть разных типов.