Часть 12.10: Исключить повторяющиеся строки из выборки данных: SELECT DISTINCT в SQLite
Привет, посетитель сайта ZametkiNaPolyah.ru! Продолжаем изучать базы данных и наше знакомство с библиотекой SQLite3. Часто…
Привет, посетитель сайта ZametkiNaPolyah.ru! Продолжаем изучать базы данных и наше знакомство с библиотекой SQLite3. В этой записи мы поговорим про ограничения уровня таблицы, которые нужны для поддержания целостности данных в базах данных, а так же для того, чтобы организовать связи между таблицами. Ограничения уровня таблицы в SQLite могут быть объявлены, как ограничения уровня столбца, хотя такой синтаксис записи может быть не всегда понятен, поэтому мы не будем его рассматривать.
Из данной записи вы узнаете: о видах ограничения уровня таблицы, реализованных в базах данных SQLite3 о том, почему первичный и внешний ключ являются ограничениями уровня таблицы, и том, как помогают каскадные операции манипуляции данными поддерживать целостность данных ограничениям уровня таблицы.
Содержание статьи:
Мы подробно рассмотрели ограничения уровня столбца в базах данных SQLite и выяснили, что данные ограничения действуют внутри таблицы и обеспечивают целостность данных в столбцах базы данных, теперь давайте перейдем к более сложны ограничениям – ограничениям уровня таблицы.
На рисунке ниже вы можете увидеть синтаксис использования ограничений уровня таблицы в базах данных SQLIte3.
Заметим, что ограничения уровня таблицы очень тесно связаны с понятием нормализации отношения в базе данных, а также ограничения уровня таблицы реализуют на практике связи между таблицами в базе данных.
Ограничения уровня таблицы дают возможность обеспечить целостность данных в базе данных, эти ограничения позволяют нам избавиться от аномалий при использовании команд группы манипуляции данными, давайте посмотрим от чего защищают ограничения уровня таблицы:
А теперь посмотрим, какие ограничения уровня таблицы есть в базах данных SQLite3:
Первичный ключ в теории баз данных – это столбец, который позволяет однозначно идентифицировать таблицы внутри базы данных. Но ни одна СУБД в мире, в том числе и SQLite, не знает ни про какого Кодда и его реляционную теорию баз данных, и даже не знает о том, что есть какой-то там первичный ключ.
Для SQLite первичный ключ или PRIMARY KEY – это всего лишь правило, которое не должен нарушать никто и если вы сказали SQLite, что этот столбец PRIMARY KEY, то она позаботится о том, чтобы значения в этом столбце были уникальными и вечными.
PRIMARY KEY на самом деле не только ограничение уровня таблицы в базе данных SQLite, но еще и индекс таблицы, который позволяет значительно ускорить процесс выборки данных из базы данных при помощи команды SELECT. Если вы знакомы с индексами таблиц в базе данных, то знаете, что любому индексу можно дать имя, даже нужно давать имя, ограничению PRIMARY KEY мы тоже можем дать имя.
Внешний ключи – это ограничение уровня таблицы в реляционной базе данных. В теории, внешний ключ – это связь между таблицами, как вы помните, связи между таблицами делятся на два вида: связь один ко многим и связь многие ко многим. Связь один к одному мы в расчет не берем, так как обычно такая связь означает, что две таблицы нужно объединить в одну.
SQLite, опять же, не знает про виды связей и внешний ключ для нее – ограничение. Конструкция FOREIGEN KEY говорит SQLite о том, что данный столбец будет связан со столбцом другой таблицы. А конструкция REFERENCE указывает на столбец другой таблицы: то есть дает ссылку, по которой SQLite понимает, что эти таблицы связаны.
Далее мы подробно остановимся на ограничении внешнего ключа в базах данных SQLite. Сейчас важно понять, что внешний ключ – это ограничение уровня таблицы, которое указывает SQLite на то, что данные в таблицах связаны между собой очень тесно и SQLite начинает следить за тем, чтобы целостность связей между этими таблицами не была нарушена.
Дополнительным механизмом поддержания целостности данных в базах данных SQLite3 является каскадное удаление таблиц и каскадная модификация таблиц в базах данных. Когда мы организуем связи между таблицами при помощи внешнего ключа, SQLite начинает следить за целостностью связей между таблицами и не дает удалить значение из родительской таблицы, пока не будут удалены значения из дочерних таблиц.
Каскадное удаление и модификация данных в таблицах имеют два назначения: первое заключается в том, чтобы облегчить процесс удаления данных из таблицы базы данных (так как не всегда удобно выполнять несколько раз команду DELETE) и облегчить процесс модификации данных в таблицах базы данных (так как команду UPDATE тоже не очень удобно выполнять несколько раз); второе назначение заключается в обеспечение целостности данных и связей между таблицами.
Мы в отдельности рассмотрим каскадное удаление данных при помощи конструкции ON DELETE и каскадную модификацию данных при помощи конструкции ON UPDATE.
Выберете удобный для себя способ, чтобы оставить комментарий