
Vot{время отправления}:string;
FIOnp{ФИО начальника поезда}:STRING;
NomVagon {номер вагона}: INTEGER;
Tvg{тип вагона (плацкарт, купе, мягкbй)}:STRING;
KolMest (Количество мест) : INTEGER;
KodProv: {Код проводника} INTEGER;
NomMest{номер места}: INTEGER;
FIO{ФИО пассажира}:STRING;
Npv{порядковый номер остановки - пункта высадки}:STRING
FioProv: {Фамилия проводника} STRING;
Ключевые поля (KodRejs,NomNed,NomDen,NomVagon,NomMest) в таблице подчеркнуты. Для данного отношения имеем следующие функциональные отношения:
(KodRejs,NomNed,NomDen) (Vot,FIOnp)
(KodRejs,NomNed,NomDen, NomVagon) (Tvg,KodProv,FioProv)
(KodRejs,NomNed,NomDen, NomVagon, NomMest) (Fio,Npv)
KodProv FioProv
Tvg -> KolMest
Первые две функциональных зависимостей относятся к классу частичных и согласно правилу построения 2NF могут быть декомпозированы в таблицы
Таблица DetSved:
KodRejs: (Номер рейса) : INTEGER; NomNed {Номер недели} : INTEGER; NomDen {номер дня недели}: INTEGER; |
Vot{время отправления}:STRING; FIOnp{ФИО начальника поезда}:STRING; |
Таблица Svg:
KodRejs: (Номер рейса) : INTEGER; NomNed {Номер недели} : INTEGER; NomDen {номер дня недели}: INTEGER; NomVagon {номер вагона}: INTEGER; |
Tvg{тип вагона (плацкарт, купе, мягкий)}:STRING; KolMest (Количество мест) : INTEGER; KodProv: {Код проводника} INTEGER; FioProv: {Фамилия проводника} STRING; |
Таблица Zvg:
KodRejs: (Номер рейса) : INTEGER; NomNed {Номер недели} : INTEGER; NomDen {номер дня недели}: INTEGER; NomVagon {номер вагона}: INTEGER; NomMest{номер места}: INTEGER; |
FIO{ФИО пассажира}:STRING; Npv{порядковый номер остановки - пункта высадки}:STRING |
Учитывая транзитивность,
(KodRejs,NomNed,NomDen, NomVagon) (Tvg,KodProv,FioProv)
KodProv FioProv
а также
При приведении к 3NF, таблица Svg разобьется на три таблицы:
Таблица Svg:
KodRejs: (Номер рейса) : INTEGER; NomNed {Номер недели} : INTEGER; NomDen {номер дня недели}: INTEGER; NomVagon {номер вагона}: INTEGER; |
Tvg{тип вагона (плацкарт, купе, мягкbй)}:STRING; KodProv: {Код проводника} INTEGER;
|
Таблица Prov:
KodProv: {Код проводника} INTEGER; |
FioProv: {Фамилия проводника} STRING; |
Таблица TVag:
Tvg: { тип вагона } INTEGER; |
KolMest (Количество мест) : INTEGER;
|
В целом получается такое же разбиение, но при этом используется правила приведения к 1NF ,2NF и 3NF.
1 Предполагается, что 35- максимальное количество мест для всех типов вагонов
2 При отсутствии места в вагоне данного типа информация по месту не заполняется