Физическая модель данных
CONSTRAINT FOREIGN KEY () REFERENCES. Students] () ON DELETE SET NULL. CONSTRAINT FOREIGN KEY () REFERENCES. Students] () ON DELETE CASCADE,. CONSTRAINT FOREIGN KEY () REFERENCES. Groups] () ON DELETE SET NULL. ПреподавательГруппаДисциплина. Рис. 3 Физическая модель данных. CONSTRAINT FOREIGN KEY () REFERENCES. Teachers] (),. CONSTRAINT FOREIGN KEY () REFERENCES. Subjects] (),. CONSTRAINT FOREIGN… Читать ещё >
Физическая модель данных (реферат, курсовая, диплом, контрольная)
Это модель данных которая описанна с помощью средств конкретной СУБД. В нашем случае это MS SQL Server 2016.
Рис. 3 Физическая модель данных
Пояснение:
Добавлена таблица ApplicationsForRegistration. Она служит для того что бы студент подавал заявку на регистрацию.
Скрипты создания таблиц
Группа.
CREATE TABLE [dbo]. Groups] (.
[Id] INT IDENTITY (1, 1) NOT NULL,.
[Number] INT NOT NULL,.
[YearOfAdmission] INT NOT NULL,.
[Faculty] NVARCHAR (128) NOT NULL,.
[Degree] NVARCHAR (128) NOT NULL,.
[FormOfStudy] NVARCHAR (128) NOT NULL,.
[MonitorId] INT NULL,.
CONSTRAINT [PK_Groups] PRIMARY KEY CLUSTERED ([Id] ASC),.
CONSTRAINT [FK_dbo_Groups_dbo_Students_MonitorId] FOREIGN KEY ([MonitorId]) REFERENCES [dbo]. Students] ([Id]) ON DELETE SET NULL.
);
GO.
CREATE NONCLUSTERED INDEX [IX_FK_dbo_Groups_dbo_Students_MonitorId].
ON [dbo]. Groups]([MonitorId] ASC);
MonitorId — Id старосты группы.
Внешний ключ на таблицу Student для старосты группы. При удалении этой таблицы Student то вместо неё ставиться null. Так как MonitorId не обязательное поле таблицы.
Используется некластеризованный индекс у внешнего ключа для увеличения скорости запросов.
Студент.
CREATE TABLE [dbo]. Students] (.
[Id] INT IDENTITY (1, 1) NOT NULL,.
[Number] NVARCHAR (128) NOT NULL,.
[FullName] NVARCHAR (128) NOT NULL,.
[YearOfBirth] INT NOT NULL,.
[GroupId] INT NULL,.
[Photo] VARBINARY (MAX) NULL,.
[UserName] NVARCHAR (256) NULL,.
[Email] NVARCHAR (128) NULL,.
CONSTRAINT [PK_Students] PRIMARY KEY CLUSTERED ([Id] ASC),.
CONSTRAINT [FK_dbo_Students_dbo_Groups_GroupId] FOREIGN KEY ([GroupId]) REFERENCES [dbo]. Groups] ([Id]) ON DELETE SET NULL.
);
GO.
CREATE NONCLUSTERED INDEX [IX_FK_dbo_Students_dbo_Groups_GroupId].
ON [dbo]. Students]([GroupId] ASC);
Таблица Student ссылается на таблицу Group через поле GroupId, для того что бы студент был привязан ко одной из групп.
Поле UserName используется для того что связываться с аккаунтом (если он есть).
Используется некластеризованный индекс у внешнего ключа для увеличения скорости запросов.
Преподаватель.
CREATE TABLE [dbo]. Teachers] (.
[Id] INT IDENTITY (1, 1) NOT NULL,.
[FullName] NVARCHAR (128) NOT NULL,.
[Departament] NVARCHAR (128) NOT NULL,.
[UserName] NVARCHAR (128) NULL,.
CONSTRAINT [PK_Teachers] PRIMARY KEY CLUSTERED ([Id] ASC).
);
Поле UserName используется для того что связываться с аккаунтом (если он есть).
Дисциплина.
CREATE TABLE [dbo]. Subjects] (.
[Id] INT IDENTITY (1, 1) NOT NULL,.
[Name] NVARCHAR (128) NOT NULL,.
[Departament] NVARCHAR (128) NOT NULL,.
CONSTRAINT [PK_Subjects] PRIMARY KEY CLUSTERED ([Id] ASC).
);
Семестр.
CREATE TABLE [dbo]. Semester] (.
[Id] INT IDENTITY (1, 1) NOT NULL,.
[BeginningDate] DATE NOT NULL,.
[EndDate] DATE NOT NULL,.
[Number] NVARCHAR (128) NOT NULL,.
[Year] NVARCHAR (128) NOT NULL,.
PRIMARY KEY CLUSTERED ([Id] ASC).
);
Таблица с оценками.
CREATE TABLE [dbo]. TableOfGrades] (.
[Id] INT IDENTITY (1, 1) NOT NULL,.
[TeachersGroupsSubjectId] INT NOT NULL,.
[TypeOfKnowledgeControl] NVARCHAR (128) NOT NULL,.
[SemesterId] INT NOT NULL,.
CONSTRAINT [PK_TableOfGrades] PRIMARY KEY CLUSTERED ([Id] ASC),.
CONSTRAINT [FK_dbo_TableOfGrades_dbo_TeachersGroupsSubjects_TeachersGroupsSubjectId] FOREIGN KEY ([TeachersGroupsSubjectId]) REFERENCES [dbo]. TeachersGroupsSubjects] ([Id]) ON DELETE CASCADE,.
CONSTRAINT [FK_dbo_TableOfGrades_dbo_Semester_SemesterId] FOREIGN KEY ([SemesterId]) REFERENCES [dbo]. Semester] ([Id]).
);
Таблица с оценками имеет внешний на таблицу ПреподавательГруппаДисциплина, для того что бы однозначно связать оценки с преподавателем, группой и дисциплиной.
Так же имеется внешний ключ на таблицу Семестр для того что бы связать оценки с определённым семестром.
При удалении связанной таблицы ПреподавательГруппаДисциплина, то Таблица оценок удаляется вслед за ней.
Таблицу Семестр нельзя удалить пока она связанна хотя бы с одной Таблица оценок.
Оценка.
CREATE TABLE [dbo]. TableEntry] (.
[Id] INT IDENTITY (1, 1) NOT NULL,.
[StudentId] INT NOT NULL,.
[Date] DATE NULL,.
[TableOfGradeId] INT NOT NULL,.
[Value] NVARCHAR (128) NULL,.
CONSTRAINT [PK_TableEntry] PRIMARY KEY CLUSTERED ([Id] ASC),.
CONSTRAINT [FK_dbo_TableEntry_dbo_Students_StudentId] FOREIGN KEY ([StudentId]) REFERENCES [dbo]. Students] ([Id]) ON DELETE CASCADE,.
CONSTRAINT [FK_dbo_TableEntry_dbo_TableOfGrades_TableOfGradeId] FOREIGN KEY ([TableOfGradeId]) REFERENCES [dbo]. TableOfGrades] ([Id]) ON DELETE CASCADE.
);
GO.
CREATE NONCLUSTERED INDEX [IX_FK_dbo_TableEntry_dbo_Students_StudentId].
ON [dbo]. TableEntry]([StudentId] ASC);
GO.
CREATE NONCLUSTERED INDEX [IX_FK_dbo_TableEntry_dbo_TableOfGrades_TableOfGradeId].
ON [dbo]. TableEntry]([TableOfGradeId] ASC);
Оценка имеет внешний ключ на Студента, чтобы связать оценку с определённым студентом. Так же имеется внешний ключ на Таблица оценок, для того что бы связать оценки с абстрактными данными хранящимися в Таблица оценок, такими данными как: преподаватель, дисциплина, группа, семестр.
При удалении связанного Студента или Таблицы оценок сама Оценка удаляется вслед за ними.
Используется некластеризованный индекс у внешних ключей для увеличения скорости запросов.
ПреподавательГруппаДисциплина.
CREATE TABLE [dbo]. TeachersGroupsSubjects] (.
[Id] INT IDENTITY (1, 1) NOT NULL,.
[GroupId] INT NOT NULL,.
[SubjectId] INT NOT NULL,.
[TeacherId] INT NOT NULL,.
CONSTRAINT [PK_TeachersGroupsSubjects] PRIMARY KEY CLUSTERED ([Id] ASC),.
CONSTRAINT [FK_dbo_TeachersGroupsSubjects_dbo_Subjects_SubjectId] FOREIGN KEY ([SubjectId]) REFERENCES [dbo]. Subjects] ([Id]),.
CONSTRAINT [FK_dbo_TeachersGroupsSubjects_dbo_Teachers_TeacherId] FOREIGN KEY ([TeacherId]) REFERENCES [dbo]. Teachers] ([Id]),.
CONSTRAINT [FK_dbo_TeachersGroupsSubjects_dbo_Groups_GroupId] FOREIGN KEY ([GroupId]) REFERENCES [dbo]. Groups] ([Id]).
);
GO.
CREATE NONCLUSTERED INDEX [IX_FK_dbo_TeachersGroupsSubjects_dbo_Groups_GroupId].
ON [dbo]. TeachersGroupsSubjects]([GroupId] ASC);
GO.
CREATE NONCLUSTERED INDEX [IX_FK_dbo_TeachersGroupsSubjects_dbo_Subjects_SubjectId].
ON [dbo]. TeachersGroupsSubjects]([SubjectId] ASC);
GO.
CREATE NONCLUSTERED INDEX [IX_FK_dbo_TeachersGroupsSubjects_dbo_Teachers_TeacherId].
ON [dbo]. TeachersGroupsSubjects]([TeacherId] ASC);
ПреподавательГруппаДисциплина имеет внешние ключи на Группу, Дисциплину и Преподавателя так-как смысл самой таблицы ПреподавательГруппаДисциплина для того что абстрагировать эту связь 3-х таблиц от Таблицы с оценками.
При удалении одной из связанных таблиц ПреподавательГруппаДисциплина тоже удаляется.