Skip to main content

Отношения "един до много" в база данни

СЕКС И ДУХОВНЫЙ ПУТЬ (Може 2025)

СЕКС И ДУХОВНЫЙ ПУТЬ (Може 2025)
Anonim

Отношението "един към много" в базата данни се получава, когато всеки запис в таблица А може да има много свързани записи в таблица Б, но всеки запис в таблица Б може да има само един съответен запис в таблица А. Връзката "едно към много" в базата данни е най-разпространеният дизайн на релационни бази данни и е в основата на добрия дизайн.

Помислете за връзката между учител и курсовете, които преподават. Учителят може да преподава няколко курса, но курсът няма да има същата връзка с учителя.

Следователно, за всеки запис в таблицата "Учители" може да има много записи в таблицата "Курсове". Това е връзка "един към много": един учител на няколко курса.

Защо е важно да установите връзка "един към много"

За да представлявате връзка "един към много", трябва да имате поне две таблици. Да видим защо.

Вероятно създадохме маса, в която искахме да запишем името и учебните курсове. Можем да го проектираме така:

Учители и курсове
Teacher_IDTEACHER_NAMEкурс
Teacher_001КарменБиология
Teacher_002вероникаMath
Teacher_003ХорхеАнглийски

Ами ако Кармен учи две или повече курсове? Имаме две възможности с този дизайн. Можем просто да го добавим към съществуващия запис на Кармен, както следва:

Учители и курсове
Teacher_IDучител_иметокурс
Teacher_001КарменБиология, Математика
Teacher_002вероникаMath
Teacher_003ХорхеАнглийски

Дизайнът по-горе обаче е негъвкав и може да доведе до проблеми по-късно, когато се опитвате да вмъквате, редактирате или изтривате данни.

Това затруднява търсенето на данни. Този проект нарушава първия принцип на нормализиране на базата данни, First Normal Form (1NF), който гласи, че всяка клетка на таблицата трябва да съдържа отделно отделно количество данни.

Друга алтернатива може да бъде просто да добавите втори запис за Carmen:

Учители и курсове
учител_ДОКУМЕНТ ЗА САМОЛИЧНОСТучител_иметокурс
Teacher_001КарменБиология
Teacher_001КарменMath
Teacher_002вероникаMath
Teacher_003ХорхеАнглийски

Това се придържа към 1NF, но все още е слаб дизайн на базата данни, тъй като той въвежда съкращения и може да издуха много голяма база данни ненужно. По-важното е, че данните могат да станат непоследователни. Например, какво ще стане, ако името на Кармен се промени? Някой, който работи с данните, може да актуализира името си в един запис и да не го актуализира във втория запис. Този проект нарушава втората нормална форма (2NF), която се придържа към 1NF и също трябва да избягва съкращенията на множество записи, като разделя подмножествата данни на множество таблици и създава взаимоотношения между тях.

Как да проектираме база данни с едно до много взаимоотношения

За да приложим връзка "един към много" в таблицата "Учители и курсове", разделяме масите на две и ги свързваме с чужд ключ.

Тук премахнахме графата "Курс" в таблицата "Учители":

учители
учител_ДОКУМЕНТ ЗА САМОЛИЧНОСТучител_името
Teacher_001Кармен
Teacher_002вероника
Teacher_003Хорхе

И тук е таблицата за курсове. Обърнете внимание, че неговият чужд ключ, Teacher_ID, свързва курс с учител в таблицата "Учители":

курсове
Course_IDCOURSE_NAMETeacher_ID
Course_001БиологияTeacher_001
Course_002MathTeacher_001
Course_003АнглийскиTeacher_003

Разработихме връзка между таблицата "Учители и курсове" с помощта на чужд ключ.

Това ни казва, че както Биология, така и Математика се преподава от Кармен и че Хорхе преподава английски.

Можем да видим как този проект избягва всякакви възможни съкращения, позволява на отделните учители да преподават няколко курса и изпълнява взаимоотношения един към много.

Базите данни могат да осъществят и взаимоотношения "един към един" и "много към много".