Ответ
на Задание 1:
Отношением является таблица Student. Атрибутами являются ее столбцы: StudentID,
FullName, BirthDate, Email, GroupName. Кортежами являются отдельные строки
таблицы, каждая из которых описывает одного студента.
В качестве первичного ключа целесообразно использовать
StudentID, поскольку идентификатор должен однозначно определять каждого
студента и не повторяться для разных записей.
Ответ Задание 2:
CREATE TABLE StudentGroup (
GroupID INT
PRIMARY KEY,
GroupName
VARCHAR(50) NOT NULL
);
CREATE TABLE Student (
StudentID INT
PRIMARY KEY,
FullName
VARCHAR(100) NOT NULL,
Email
VARCHAR(100),
GroupID INT,
FOREIGN KEY
(GroupID) REFERENCES StudentGroup(GroupID)
);
GroupID является первичным ключом таблицы StudentGroup, а
StudentID — первичным ключом таблицы Student.
Поле GroupID в таблице Student является внешним ключом и
ссылается на GroupID таблицы StudentGroup.
Таким образом реализуется связь «один ко многим» (1:N):
одна группа может содержать много студентов, но каждый студент относится к
одной группе.
Ответ
на Задание 3:
Между студентами и дисциплинами существует связь «многие ко многим» (M:N).
Напрямую такую связь в реляционной базе данных обычно
реализуют с помощью промежуточной таблицы.
CREATE TABLE Student (
StudentID INT
PRIMARY KEY,
FullName
VARCHAR(100) NOT NULL
);
CREATE TABLE Course (
CourseID INT
PRIMARY KEY,
CourseName
VARCHAR(100) NOT NULL
);
CREATE TABLE Enrollment (
StudentID INT,
CourseID INT,
EnrollmentDate
DATE,
PRIMARY KEY
(StudentID, CourseID),
FOREIGN KEY
(StudentID) REFERENCES Student(StudentID),
FOREIGN KEY
(CourseID) REFERENCES Course(CourseID)
);
Таблица Enrollment является связующей таблицей. Пара
StudentID и CourseID образует составной первичный ключ.
Например, если студент с StudentID = 15 зарегистрирован на
трех дисциплинах, в таблице Enrollment будут находиться три записи с его
идентификатором.
Такая структура позволяет хранить дополнительные
характеристики самой связи, например EnrollmentDate, итоговую оценку или статус
прохождения дисциплины.