Ответ на задание 1
Для связи 1:N первичный ключ сущности со стороны «1»
переносится в таблицу со стороны «N» в качестве внешнего ключа.
Получим две таблицы:
CREATE TABLE Department (
DepartmentID INT
PRIMARY KEY,
DepartmentName
VARCHAR(100) NOT NULL
);
CREATE TABLE Teacher (
TeacherID INT
PRIMARY KEY,
FullName
VARCHAR(100) NOT NULL,
DepartmentID INT
NOT NULL,
FOREIGN KEY
(DepartmentID)
REFERENCES
Department(DepartmentID)
);
DepartmentID является первичным ключом таблицы Department. В
таблице Teacher это же поле является внешним ключом.
Таким образом:
Department 1 ───── N Teacher
Один отдел может быть связан с несколькими преподавателями.
Ответ на задание 2
Связь M:N нельзя непосредственно представить одним
внешним ключом. Поэтому создается дополнительная связующая таблица Enrollment.
Получим три таблицы:
CREATE TABLE Student (
StudentID INT
PRIMARY KEY,
FullName
VARCHAR(100) NOT NULL
);
CREATE TABLE Course (
CourseID INT
PRIMARY KEY,
CourseName
VARCHAR(100) NOT NULL,
Credits INT
);
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)
);
Структура связи:
Student 1 ─── N Enrollment N
─── 1 Course
В таблице Enrollment используется составной первичный ключ:
StudentID + CourseID.
Он предотвращает повторную регистрацию одного студента на
одну и ту же дисциплину.
Ответ на задание 3
Для данной ER-модели необходимы четыре таблицы:
Связь между клиентом и заказами имеет тип 1:N. Связь
между заказами и товарами — M:N, поэтому для нее создается таблица
OrderItem.
CREATE TABLE Customer (
CustomerID INT
PRIMARY KEY,
FullName
VARCHAR(100) NOT NULL,
Email VARCHAR(100)
);
CREATE TABLE Orders (
OrderID INT
PRIMARY KEY,
OrderDate DATE NOT
NULL,
CustomerID INT NOT
NULL,
FOREIGN KEY
(CustomerID)
REFERENCES
Customer(CustomerID)
);
CREATE TABLE Product (
ProductID INT
PRIMARY KEY,
ProductName
VARCHAR(100) NOT NULL,
Price
DECIMAL(10,2) NOT NULL
);
CREATE TABLE OrderItem (
OrderID INT,
ProductID INT,
Quantity INT NOT
NULL,
PRIMARY KEY
(OrderID, ProductID),
FOREIGN KEY
(OrderID)
REFERENCES
Orders(OrderID),
FOREIGN KEY
(ProductID)
REFERENCES
Product(ProductID)
);
Итоговая структура:
Customer 1 ─── N Orders
|
| 1
|
N
OrderItem
N
|
| 1
Product
CustomerID связывает клиента с его заказами. Таблица
OrderItem реализует связь M:N между заказами и товарами, а поле Quantity
показывает количество конкретного товара в заказе.