💀
Второй курс РПО
Основы проектирования баз данных
Основы проектирования баз данных
  • Понятия баз данных
  • Типы моделей данных
    • Реляционные базы данных
  • Реляционная алгебра
  • Модель процессов
  • Проектирование базы данных
  • Нормальные формы
    • Определения, и самое важное
  • Моделирование базы
    • Практическая работа: Решение
    • Для тех у кого iq как у Антона
  • Инструменты проектирования
  • Проектирование БД
  • Ключи и объекты
  • SQL Операции
  • Группировка данных
  • Пользовательский интерфейс
  • Проектирование БД
  • Управление таблицами
  • Ключи и индексы
  • Сортировка и поиск
    • 🤪Короткая версия
  • Работа с файлами
  • Запись массива в таблицу
  • Меню баз данных
  • Рабочие окна
  • Создание формы
  • Создание проекта БД и интерфейса
  • Ограничения полей
  • Работа с таблицами
  • Обработка транзакций
Powered by GitBook
On this page
  • Создание ключевых полей, индексов и связей между таблицами
  • 1. Ключевые поля
  • 2. Индексы
  • 3. Связи между таблицами
  • Связь один-к-одному (1:1)
  • Связь один-ко-многим (1:M)
  • Связь многие-ко-многим (M:N)
  • 4. Удаление связей и изменение структуры таблиц
  • 5. Удаление внешнего ключа

Ключи и индексы

07.11.2024

PreviousУправление таблицамиNextСортировка и поиск

Last updated 6 months ago

Создание ключевых полей, индексов и связей между таблицами

Работа с ключевыми полями, индексами и связями между таблицами — важные аспекты управления реляционными базами данных. Эти элементы помогают оптимизировать доступ к данным, гарантировать их целостность и поддерживать структурированные связи между таблицами.


1. Ключевые поля

Ключевые поля используются для однозначной идентификации каждой записи в таблице. Существуют разные типы ключей:

  • Первичный ключ (Primary Key) Первичный ключ обеспечивает уникальность каждой записи. Поле, выбранное в качестве первичного ключа, не должно содержать дубликатов и пустых значений.

Пример: В таблице Users поле user_id может быть первичным ключом, так как оно уникально для каждого пользователя.

  • Внешний ключ (Foreign Key) Внешний ключ связывает одну таблицу с другой, указывая на первичный ключ другой таблицы. Он обеспечивает связь между таблицами и позволяет избегать избыточности данных.

Пример: В таблице Orders поле user_id может быть внешним ключом, ссылающимся на user_id из таблицы Users.


2. Индексы

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

  • Создание индексов Индекс создается на определенном столбце или комбинации столбцов, которые часто участвуют в запросах. Индексы могут быть уникальными (уникальный индекс) или неуникальными.

    CREATE INDEX idx_user_email ON Users(email);
  • Преимущества индексов Индексы ускоряют операции SELECT, что особенно важно для сложных запросов с условиями WHERE. Но нужно помнить, что избыточное количество индексов замедляет операции вставки и обновления данных.

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


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

Связь один-к-одному (1:1)

Связь один-к-одному (1:1) означает, что каждой записи в одной таблице соответствует ровно одна запись в другой таблице. Такая связь используется для разделения данных на логические части, когда информация может быть вынесена в отдельную таблицу.

Пример: В таблице Users хранится общая информация о пользователе, а в таблице UserDetails — более детальная информация. Каждой записи в Users соответствует одна запись в UserDetails.

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

CREATE TABLE Users (
    user_id INT PRIMARY KEY,
    name VARCHAR(50)
);

CREATE TABLE UserDetails (
    user_id INT,
    address VARCHAR(100),
    FOREIGN KEY (user_id) REFERENCES Users(user_id) UNIQUE
);

Удаление связи один-к-одному

Удаление связи один-к-одному предполагает удаление внешнего ключа, связывающего таблицы. Это убирает связь между ними, сохраняя данные в обеих таблицах.

ALTER TABLE UserDetails
DROP FOREIGN KEY fk_user_id;

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

Связь один-ко-многим (1:M)

Связь один-ко-многим (1:M) означает, что одной записи в первой таблице может соответствовать множество записей во второй таблице. Такая структура часто используется для описания отношений, где одна сущность может быть связана с несколькими другими.

Пример: В таблице Users хранится информация о пользователях, а в таблице Orders — о заказах. Каждый пользователь может иметь несколько заказов, но каждый заказ принадлежит только одному пользователю.

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

CREATE TABLE Users (
    user_id INT PRIMARY KEY,
    name VARCHAR(50)
);

CREATE TABLE Orders (
    order_id INT PRIMARY KEY,
    user_id INT,
    order_date DATE,
    FOREIGN KEY (user_id) REFERENCES Users(user_id)
);

Связь многие-ко-многим (M:N)

Связь многие-ко-многим (M:N) означает, что каждая запись в одной таблице может быть связана с несколькими записями в другой таблице, и наоборот. Такая связь обычно создается с помощью промежуточной (связующей) таблицы, которая содержит внешние ключи обеих таблиц.

Пример: Таблицы Students и Courses могут быть связаны через связь многие-ко-многим, где один студент может быть записан на несколько курсов, а один курс может включать нескольких студентов.

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

CREATE TABLE Students (
    student_id INT PRIMARY KEY,
    name VARCHAR(50)
);

CREATE TABLE Courses (
    course_id INT PRIMARY KEY,
    title VARCHAR(100)
);

CREATE TABLE StudentCourses (
    student_id INT,
    course_id INT,
    FOREIGN KEY (student_id) REFERENCES Students(student_id),
    FOREIGN KEY (course_id) REFERENCES Courses(course_id),
    PRIMARY KEY (student_id, course_id)
);

Удаление связи многие-ко-многим

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

ALTER TABLE StudentCourses
DROP FOREIGN KEY fk_student_id;

ALTER TABLE StudentCourses
DROP FOREIGN KEY fk_course_id;

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


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

  • Удаление внешнего ключа Внешний ключ можно удалить командой DROP CONSTRAINT, чтобы убрать связь между таблицами.

    ALTER TABLE Orders
    DROP CONSTRAINT fk_user_id;
  • Изменение структуры таблицы Команда ALTER TABLE позволяет изменять структуру таблицы, добавляя или удаляя поля, а также создавая или удаляя индексы и ограничения.

Важно: Перед внесением изменений рекомендуется создать резервную копию данных, чтобы избежать потери важной информации.

5. Удаление внешнего ключа

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

  • Удаление внешнего ключа с помощью SQL После определения имени внешнего ключа применяется команда ALTER TABLE:

    ALTER TABLE <table_name>
    DROP CONSTRAINT <foreign_key_name>;
    • В MySQL вместо CONSTRAINT можно указать FOREIGN KEY:

      ALTER TABLE <table_name>
      DROP FOREIGN KEY <foreign_key_name>;

Важно: Убедитесь, что удаление внешнего ключа не нарушит целостность данных между таблицами.

3. Связи между таблицами

4. Удаление связей и изменение структуры таблиц