Термины базы данных «реляционный» и «отношение» описывают способ, которым связаны данные в таблицах. Реляционная база данных состоит из серии из двух или более таблиц, связанных определенным ключом. Реляционная база данных отличается от неструктурированных баз данных, которые часто используются в инициативах по работе с большими данными. Реляционные базы данных, как правило, требуют строгих правил в отношении того, как определяются таблицы и что составляет допустимую связь между таблицами.
Типы отношений с базой данных
Отношения позволяют вам описать связи между таблицами базы данных мощными способами. Затем эти отношения можно использовать для выполнения мощных запросов между таблицами, известных как JOIN.
Существует три типа отношений базы данных, каждый из которых назван в соответствии с количеством строк таблицы, вовлеченных в отношение. Каждый из этих трех типов отношений существует между двумя таблицами.
- Отношения «один к одному» возникают, когда каждая запись в первой таблице имеет только один аналог во второй таблице. Отношения «один к одному» используются редко, потому что зачастую более эффективно поместить всю информацию в одну таблицу. Некоторые проектировщики баз данных используют эту связь, создавая таблицы, содержащие подмножество данных из другой таблицы.
- Отношения «один ко многим» являются наиболее распространенным типом отношений базы данных. Они возникают, когда каждая запись в таблице A соответствует одной или нескольким записям в таблице B, но каждая запись в таблице B соответствует только одной записи в таблице A. Например, связь между таблицей «Учителя» и таблицей «Ученики» в начальной школе база данных, вероятно, будет отношением «один ко многим», потому что у каждого ученика есть только один учитель, но у каждого учителя есть несколько учеников. Такой подход «один ко многим» помогает исключить дублирование данных.
- Отношения «многие ко многим» возникают, когда каждая запись в таблице A соответствует одной или нескольким записям в таблице B, а каждая запись в таблице B соответствует одной или нескольким записям в таблице A. Например, связь между таблицей «Учителя» и таблицей «Курсы», скорее всего, будет «многие ко многим», потому что каждый учитель может вести более одного курса, а у каждого курса может быть более одного инструктора.
Итог
Самоссылающиеся отношения возникают, когда задействована только одна таблица. Одним из распространенных примеров является таблица «Сотрудники», которая содержит информацию о руководителе каждого сотрудника. Каждый супервайзер также является сотрудником и имеет супервайзера. В этом случае существует самореферентная связь «один ко многим», поскольку у каждого сотрудника есть один руководитель, но у каждого руководителя может быть более одного сотрудника.
Создание отношений с внешними ключами
Вы создаете связи между таблицами, указывая внешний ключ. Этот ключ сообщает реляционной базе данных, как связаны таблицы. Во многих случаях столбец в таблице A содержит первичные ключи, на которые есть ссылки из таблицы B.
Рассмотрим пример таблиц «Учителя» и «Студенты». Таблица «Учителя» содержит идентификатор, имя и столбец курса:
InstructorID | Teacher_Name | Курс |
001 | Джон Доу | Английский |
002 | Джейн Шмо | Математика |
Таблица студентов содержит идентификатор, имя и столбец внешнего ключа:
StudentID | Имя_Студента | Teacher_FK |
0200 | Лоуэлл Смит | 001 |
0201 | Брайан Шорт | 001 |
0202 | Корки Мендес | 002 |
0203 | Моника Джонс | 001 |
Столбец Teacher_FK в таблице «Студенты» ссылается на значение первичного ключа инструктора в таблице «Учителя». Часто проектировщики баз данных используют PK или FK в имени столбца для идентификации столбца первичного или внешнего ключа.
Эти две таблицы иллюстрируют отношение «один ко многим» между учителями и учениками.
Отношения и ссылочная целостность
После добавления внешнего ключа в таблицу создайте ограничение базы данных, обеспечивающее ссылочную целостность между двумя таблицами. Этот шаг гарантирует, что отношения между таблицами останутся согласованными. Когда одна таблица имеет внешний ключ к другой таблице, ссылочная целостность требует, чтобы любое значение внешнего ключа в таблице B ссылалось на существующую запись в таблице A.
Реализация отношений
В зависимости от вашей базы данных вы будете реализовывать связи между таблицами по-разному. Microsoft Access предоставляет мастер, который позволяет вам связывать таблицы, а также обеспечивать ссылочную целостность.
Если вы пишете SQL напрямую, сначала создайте таблицу Учителя, объявив столбец ID первичным ключом:
CREATE TABLE Преподаватели (InstructorID INT AUTO_INCREMENT PRIMARY KEY, Teacher_Name VARCHAR(100), Course VARCHAR(100));
Когда вы создаете таблицу «Студенты», вы объявляете столбец «Teacher_FK» внешним ключом, ссылающимся на столбец «InstructorID» в таблице «Учителя»:
CREATE TABLE Student (StudentID INT AUTO_INCREMENT PRIMARY KEY, Student_Name VARCHAR(100), Teacher_FK INT, FOREIGN KEY (Teacher_FK) REFERENCES Teachers(InstructorID)));
Использование отношений для соединения таблиц
После создания одной или нескольких связей в базе данных используйте их возможности, используя запросы SQL JOIN для объединения информации из нескольких таблиц. Наиболее распространенным типом соединения является SQL INNER JOIN, которое представляет собой простое соединение. Этот тип соединения возвращает все записи, удовлетворяющие условию соединения, из одной или нескольких таблиц.
Например, это условие JOIN возвращает имя_ученика, имя_учителя и курс, где внешний ключ в таблице «Студенты» совпадает с первичным ключом в таблице «Учителя»:
ВЫБЕРИТЕ Студенты. Имя_Студента, Учителя. Имя_Учителя, Учителя. Курс
FROM Студенты
INNER JOIN УчителяON Студенты. Teacher_FK=Teachers. InstructorID;
Этот оператор создает примерно такую таблицу:
Student_Name | Teacher_Name | Курс |
Лоуэлл Смит | Джон Доу | Английский |
Брайан Шорт | Джон Доу | Английский |
Корки Мендес | Джейн Шмо | Математика |
Моника Джонс | Джон Доу | Английский |