Базы данных. Описание инфологической модели АТС, страница 2

Create table Тарифы(Город   char(20) NOT NULL,

Тариф_мин  money NOT NULL)

*(Обозначающая сущность)

Первичный ключ  (Город)

Внешний  ключ  (Город)

Ограничения

Значения поля Город должны принадлежать множеству: Москва, Санкт-Петербург, Тула, Красноярск, Бердск

Значения поля Тариф_мин – положительное число означающее стоимость в рублях одной минуты разговора с городом, определяемым полем Город этой же таблицы

Create table Владение(Номер_тел   integer NOT NULL,

Код_абонента integer ,

Код_адреса integer )

*(Ассоциативная сущность – связывает сущности Номера,Адреса,и Абоненты)

Первичный ключ  (Номер_тел,Код_абонента,Код_адреса)

Внешний  ключ  Номер_тел из Номера

                                Обновление Владение Каскадируется

Код_абонента из Абоненты

Обновление Владение Каскадируется

Код_адреса из Адреса

Обновление Владение Каскадируется

Ограничения

Значения поля Номер_тел – это шестизначные целые числа;

Значения поля Код_абонента – шестизначное целое число;

Значения поля Код_адреса – шестизначное целое число

Create table Адреса(Код_адреса  integer  NOT NULL,

Улица  char(20)  NOT NULL,

Дом  smallint NOT NULL,

Квартира smallint )

*(Обозначающая сущность )

Первичный ключ  (Код_адреса)

Ограничения

Значения поля Код_адреса – шестизначное целое число – должно быть уникальным;

Значения поля Улица принадлежит множеству Каменская, Красный_проспект, Гагаринская, Нарымская, Серебристая, Шоссейная (предположим что в городе только на этих улицах можно устанавливать телефоны)

Значения поля Дом – номер дома, число принимает значения от 1 до 60

Значения поля Квартира – номер квартиры, принимает значения от 1 до 200

Create table Абоненты(Код_абонента  integer  NOT NULL,

Тип_абонента  smallint NOT NULL,

Фамилия  char(20)  ,

Имя  char(20)  ,

Отчество  char(20)  ,

Пол char(10)  ,

Возраст  smallint  ,

Название  char(30))

*(Стержневая сущность )

Первичный ключ  (Код_абонента)

Обновления Абоненты каскадируются

Ограничения

Значения поля Код_абонента – шестизначное целое число – должно быть уникальными;

Значения поля Тип_абонента равны 1, 2 или 3 (по числу типов абонентов 1 – если это человек, 2 – если это ведомство или учреждение, 3 – если это общество )

Значения поля Фамилия принимает значение NULL, если Тип_абонента равен 2 или 3;

Значения поля Имя принимает значение NULL, если Тип_абонента равен 2 или 3;

Значения поля Отчество принимает значение NULL, если Тип_абонента равен 2 или 3

Значения поля Пол – принадлежит множеству мужской, женский, принимает значение NULL, если Тип_абонента равен 2 или 3

Значения поля Возраст – число принимает значения от 18 до 150, принимает значение NULL если Тип_абонента равен 2 или 3

Значения поля Название – принимают значение NULL,  если Тип_абонента равен 1 или 2, и равно названию ведомства или учреждения , если 3


Create table Ведомость(Код_абонента  integer  NOT NULL,

Плата money NOT NULL,

Льгота  integer NOT NULL,

Дата1  data  NOT NULL,

Дата2  data, 

Дата3  data,

Дата4  data )

*(Характеристическая сущность – не может существовать без  сущности Абоненты)

Первичный ключ  (Код абонента)

Внешний  ключ  (Код абонента)

                                Обновление Ведомость устанавливается

Ограничения

Значения поля Код_абонента – это шестизначные целые числа – должны быть уникальными;

Значения поля Льгота должно быть равно 0 или 1 (0-если у абонента нет льготы и 1 – если есть);

Значения поля Дата1 должно являться реальной датой - это дата последней оплаты абонента за городские звонки

Значения поля Дата2 должно являться  датой на две недели позже 20 числа месяца следующего за месяцем  Даты1, если текущая дата на  две недели и больше превышает 20 число месяца,следующего за месяцем Даты1 и NULL иначе

Значения поля Дата3 должно являться реальной датой - это дата последней оплаты абонента за межгород или NULL – если абонент добровольно отказался от межгородской связи

Значения поля Дата4 должно являться датой на две недели позже 20 числа месяца следующего за месяцем  Даты3, если текущая дата на  две недели и больше превышает 20 число месяца,следующего за месяцем Даты3 и NULL иначе