[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"question-bazy-dannykh-kakie-sushchestvuyut-tipy-svyazey-v-baze-dannykh":3},{"id":4,"slug":5,"topicId":6,"topicSlug":7,"topicName":8,"topicEmoji":9,"question":10,"answer":11,"codeLang":12,"codeSrc":12,"important":12,"commonMistakes":12,"modernUsage":12,"difficulty":13,"tags":14,"related":17,"progress":18,"seo":19},1136,"kakie-sushchestvuyut-tipy-svyazey-v-baze-dannykh",35,"bazy-dannykh","Базы данных","🗄️","Какие существуют типы связей в базе данных?","Типы связей (relationships) определяют, как записи одной таблицы соотносятся с записями другой таблицы. Существует три основных типа связей.\n\n### Один к одному (1:1)\n\nКаждой записи в таблице A соответствует ровно одна запись в таблице B, и наоборот.\n\nПример: каждый сотрудник имеет один пропуск, каждый пропуск принадлежит одному сотруднику.\n\n```sql\nCREATE TABLE employees (\n    id BIGINT PRIMARY KEY,\n    name VARCHAR(100)\n);\n\nCREATE TABLE passes (\n    id BIGINT PRIMARY KEY,\n    employee_id BIGINT UNIQUE NOT NULL,\n    card_number VARCHAR(20),\n    FOREIGN KEY (employee_id) REFERENCES employees(id)\n);\n```\n\nПрименение: разделение таблицы для вынесения редко используемых или конфиденциальных данных.\n\n### Один ко многим (1:N)\n\nКаждой записи в таблице A может соответствовать несколько записей в таблице B, но каждая запись в B связана только с одной записью в A.\n\nПример: в каждом университете несколько факультетов, но каждый факультет принадлежит одному университету.\n\n```sql\nCREATE TABLE universities (\n    id BIGINT PRIMARY KEY,\n    name VARCHAR(200)\n);\n\nCREATE TABLE faculties (\n    id BIGINT PRIMARY KEY,\n    university_id BIGINT NOT NULL,\n    name VARCHAR(200),\n    FOREIGN KEY (university_id) REFERENCES universities(id)\n);\n```\n\nЭто самый распространённый тип связи в реляционных базах данных.\n\n### Многие ко многим (M:N)\n\nКаждой записи в таблице A может соответствовать несколько записей в B, и наоборот. Реализуется через промежуточную (связующую) таблицу.\n\nПример: один студент может посещать несколько курсов, один курс может посещать несколько студентов.\n\n```sql\nCREATE TABLE students (\n    id BIGINT PRIMARY KEY,\n    name VARCHAR(100)\n);\n\nCREATE TABLE courses (\n    id BIGINT PRIMARY KEY,\n    title VARCHAR(200)\n);\n\n-- Связующая таблица\nCREATE TABLE student_courses (\n    student_id BIGINT NOT NULL,\n    course_id BIGINT NOT NULL,\n    PRIMARY KEY (student_id, course_id),\n    FOREIGN KEY (student_id) REFERENCES students(id),\n    FOREIGN KEY (course_id) REFERENCES courses(id)\n);\n```\n\n### Сводная таблица\n\n| Тип связи | FK в дочерней таблице | Промежуточная таблица | Пример |\n|-----------|----------------------|----------------------|--------|\n| 1:1 | Да + UNIQUE | Нет | Сотрудник — пропуск |\n| 1:N | Да | Нет | Университет — факультеты |\n| M:N | Нет | Да | Студенты — курсы |\n\n> **На собеседовании:** интервьюер ожидает, что кандидат объяснит, как реализуется связь M:N (через промежуточную таблицу), и знает, что 1:1 на практике используется редко (обычно для разделения данных по частоте доступа или безопасности).","","junior",[15,16],"databases","основы",[],null,{"title":20,"description":21,"ogTitle":22,"ogDescription":23,"keywords":24,"schemaAnswer":34,"featuredSnippetReady":35},"Типы связей в базе данных (1:1, 1:N, M:N) — Gymterview","Типы связей в реляционной БД: один к одному (1:1), один ко многим (1:N), многие ко многим (M:N). Реализация через FK и промежуточную таблицу с примерами SQL.","Типы связей в базе данных: 1:1, 1:N, M:N — Gymterview","Три типа связей в реляционных БД: один к одному, один ко многим, многие ко многим. Примеры SQL.",[25,26,27,28,29,30,31,32,33],"типы связей","один к одному","один ко многим","многие ко многим","foreign key","промежуточная таблица","relationship","SQL","Java","Три основных типа связей: один к одному (1:1) — реализуется через FK + UNIQUE, применяется для разделения данных; один ко многим (1:N) — самый распространённый тип, реализуется через FK в дочерней таблице; многие ко многим (M:N) — реализуется через промежуточную (связующую) таблицу с двумя FK.",true]