3. Построение концептуальной модели базы данных
Пользуясь построенной ER-диаграммой, разработаем концептуальную модель данных. При разработке ER-диаграммы были выделены в отдельные сущности зачетки, аттестация, тип стипендии, ученая степень, занимаемая студентом должность.
В результате имеем 9 таблиц. Определим для них первичные ключи.
Таблицы University, Department, Chair, Lecturer имеют первичные ключи, имя которых было образовано путем добавления к имени сущности выражения “ID”. Ключи имеют тип INTEGER ввиду того, что объем данных, которые могут содержаться в них, будет очень велик.
Такие таблицы как WeekType, Time, ChairType, имеют первичный ключ, название которого образовано по правилу, описанному выше, типа SMALLINT, поскольку данные в этих таблицах не будут изменяться с большой динамикой и как правило значения, хранящиеся в них, будут внесены однажды и без изменений.
Таблица Discipline имеет первичный ключ DisciplineNumber типа VARCHAR(20) для хранения символьного кода дисциплины.
Таблица Lecture имеет составной ключ, из полей GroupName, LecturerID, TimeID, WeekTypeID, DayOfWeekNumber.
В результате имеем следующую концептуальную модель:
Рис.2 Концептуальная модель.
4. Построение физической модели и создание базы данных
В разрабатываемой базе данных содержится 9 таблиц. Приведем описание каждой таблицы базы данных. Скрипты создания базы данных содержатся в приложении.
#
|
Название столбца
|
Тип данных
|
Ограничение
|
Комментарии
|
|
|
|
|
|
|
Discipline(Дисциплина)
|
1
|
DISCIPLINENUMBER
|
VARCHAR (20) NOT NULL
|
Первичный ключ
|
|
2
|
NAME
|
VARCHAR (250) NOT NULL
|
|
Название дисциплины
|
3
|
HOURS
|
SMALLINT NOT NULL
|
|
Количество часов
|
|
|
|
|
|
|
WeekType(Тип недели)
|
1
|
WEEKTYPEID
|
SMALLINT NOT NULL PRIMARY KEY
|
Первичный ключ
|
|
2
|
NAME
|
VARCHAR (100) NOT NULL
|
|
Название
|
|
|
|
|
|
|
Time(Начало пары)
|
1
|
TIMEID
|
SMALLINT NOT NULL PRIMARY KEY
|
Первичный ключ
|
|
2
|
HOUR
|
SMALLINT NOT NULL
|
|
Час начала пары
|
3
|
MINUTE
|
SMALLINT NOT NULL
|
|
Минута начала пары
|
|
|
|
|
|
|
ChairType(Тип кафедры)
|
1
|
CHAIRTYPEID
|
SMALLINT NOT NULL PRIMARY KEY
|
Первичный ключ
|
|
2
|
NAME
|
VARCHAR (250) NOT NULL
|
|
Название типа кафедры
|
|
|
|
|
|
|
University(Университет)
|
1
|
UNIVERSITYID
|
INTEGER NOT NULL PRIMARY KEY
|
Первичный ключ
|
|
2
|
NAME
|
VARCHAR (100) NOT NULL
|
|
|
3
|
ACCREDITATIONLEVEL
|
SMALLINT NOT NULL
|
|
Уровень аккредитации
|
4
|
CREATIONDATE
|
DATE NOT NULL
|
|
Дата создания
|
5
|
ADDRESS
|
VARCHAR (250)
|
|
Адрес ВУЗА
|
6
|
PHONE
|
VARCHAR (40)
|
|
Контактный телефон
|
|
|
|
|
|
|
Department(Факультет)
|
1
|
DEPARTMENTID
|
INTEGER NOT NULL PRIMARY KEY
|
Первичный ключ
|
|
2
|
UNIVERSITYID
|
INTEGER NOT NULL
|
Ссылка на таблицу University
|
|
3
|
NAME
|
VARCHAR (250) NOT NULL
|
|
Название
|
4
|
CREATIONDATE
|
DATE NOT NULL
|
|
Дата создания
|
|
|
|
|
|
|
Chair(Кафедра)
|
1
|
CHAIRID
|
INTEGER NOT NULL PRIMARY KEY
|
Первичный ключ
|
|
2
|
CHAIRTYPEID
|
SMALLINT NOT NULL
|
Ссылка на таблицу Chair
|
|
3
|
DEPARTMENTID
|
INTEGER
|
Ссылка на таблицу Department
|
|
4
|
NAME
|
VARCHAR (250) NOT NULL
|
|
Название
|
5
|
CREATIONDATE
|
DATE NOT NULL
|
|
Дата создания
|
|
|
|
|
|
|
Lecturer(Лектор)
|
1
|
LECTURERID
|
INTEGER NOT NULL PRIMARY KEY
|
Первичный ключ
|
|
2
|
CHAIRID
|
INTEGER NOT NULL
|
Ссылка на таблицу Chair
|
|
3
|
LASTNAME
|
VARCHAR (70) NOT NULL
|
|
Фамилия
|
4
|
FIRSTNAME
|
VARCHAR (70) NOT NULL
|
|
Имя
|
5
|
MIDDLENAME
|
VARCHAR (70) NOT NULL
|
|
Отчество
|
6
|
ACADEMICDEGREENAME
|
VARCHAR (120) NOT NULL
|
|
Ученая степень
|
7
|
POST
|
VARCHAR (250) NOT NULL
|
|
Занимаемая должность
|
|
|
|
|
|
|
Lecture(Лекция)
|
1
|
GROUPNAME
|
INTEGER NOT NULL PRIMARY KEY
|
Первичный ключ
|
|
2
|
LECTURERID
|
VARCHAR(20) NOT NULL PRIMARY KEY
|
Ссылка на таблицу Lecturer
|
|
3
|
DISCIPLINENUMBER
|
INTEGER NOT NULL
|
Ссылка на таблицу Discipline
|
|
4
|
TIMEID
|
SMALLINT NOT NULL PRIMARY KEY
|
Ссылка на таблицу Time
|
|
5
|
WEEKTYPEID
|
SMALLINT NOT NULL PRIMARY KEY
|
Ссылка на таблицу WeekType
|
|
6
|
DAYOFWEEKNUMBER
|
SMALLINT NOT NULL PRIMARY KEY
|
|
День недели
|
7
|
AUDITORIUM
|
VARCHAR (20) NOT NULL
|
|
Номер аудитории
|
8
|
BUILDINGNAME
|
VARCHAR (20) NOT NULL
|
|
Название корпуса
|
5. Создание процедурных ограничений целостности
При анализе структуры данных и предметной области было установлено, что структура базы данных обеспечивает целостность данных. В большинстве случаев данные, которые хранятся, не противоречат друг другу.
Хотя может возникнуть ситуация, когда в таблице лекций можно внести значение дня недели, превышающее значение 7, что изначально не является верным. Одним из возможных выходов из такой ситуации является создание триггера.
Назначим код ошибки 75001 и текст сообщения 'The DayOfWeekNumber is incorrect'.
Текст на создание триггера находится в приложении.
6. Создание типичных запросов к базе данных
6.1 Примеры операторов, которые записывают данные в таблицы
Для каждой таблицы приведем примеры запросов.
Таблица WeekType:
INSERT INTO WEEKTYPE(NAME) VALUES('Первая');
INSERT INTO WEEKTYPE(NAME) VALUES('Вторая');
Таблица Time:
INSERT INTO TIME(HOUR, MINUTE) VALUES(8, 30);
INSERT INTO TIME(HOUR, MINUTE) VALUES(10, 25);
Таблица ChairType:
INSERT INTO CHAIRTYPE(NAME) VALUES('Общая');
Таблица University:
INSERT INTO UNIVERSITY(NAME, ACCREDITATIONLEVEL, CREATIONDATE, ADDRESS, PHONE)
VALUES('Национальный Технический Университет - "Харьковский политехнический институт"', 4,
'3/09/1885', 'Украина 61002, г. Харьков, ул. Фрунзе, 21',
'706-27-49');
Таблица Department:
INSERT INTO DEPARTMENT(UNIVERSITYID, NAME, CREATIONDATE)
VALUES(1, 'Биологический', '1/9/1900');
Таблица Chair:
INSERT INTO CHAIR(CHAIRTYPEID, DEPARTMENTID, NAME, CREATIONDATE)
VALUES(2, 1, 'Биохимии', '1/9/1901');
Таблица Lecturer:
INSERT INTO LECTURER(CHAIRID, LASTNAME, FIRSTNAME, MIDDLENAME, ACADEMICDEGREENAME, POST)
VALUES(1, 'Перский', 'Евгений', 'Ефроимович', 'Профессор', 'Заведующий кафедрой');
Таблица Discipline:
INSERT INTO DISCIPLINE(DISCIPLINENUMBER, NAME, HOURS) VALUES('54354551', 'Высшая математика', 120);
Таблица Lecture:
INSERT INTO LECTURE(GROUPNAME, LECTURERID, TIMEID, WEEKTYPEID, DISCIPLINENUMBER, DAYOFWEEKNUMBER, AUDITORIUM, BUILDINGNAME)
VALUES('КИТ-64', 27, 1, 1, '54354559', 1, '202', 'ГАК');
Do'stlaringiz bilan baham: |