Ответ на задание 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 показывает количество конкретного товара в заказе.