9. Учебная схема для работы с sql

Схема для практики и упражнений состоит из набора данных для недавно созданного загородного клуба с перечнем участников. Данные содержат:

  • Участников клуба
  • Теннисные корты (объекты)
  • Историю бронирования этих объектов
  • Внимание:

  • Не воспринимайте набор как пример хорошего дизайна. Этот набор данных разработан исключительно для поддержки упражнений. Схема базы данных имеет ряд недостатков.

Схема:

-- Участники
CREATE TABLE cd.members
(  --Идентификатор 
   --memid = 0 служебная запись, для всех гостей  
    memid integer NOT NULL, 
    --Фамилия
    surname character varying(200) NOT NULL, 
    --Имя
    firstname character varying(200) NOT NULL, 
    --Адрес
    address character varying(300) NOT NULL, 
    --Почтовый код
    zipcode integer NOT NULL, 
    --Телефон
    telephone character varying(20) NOT NULL,
    --memid участника который рекомендовал текущего участника 
    recommendedby integer,
    --Дата вступления
    joindate timestamp NOT NULL,
    CONSTRAINT members_pk PRIMARY KEY (memid),
    CONSTRAINT fk_members_recommendedby FOREIGN KEY (recommendedby)
    REFERENCES cd.members(memid) ON DELETE SET NULL
);
-- Объекты
CREATE TABLE cd.facilities
(
    --Идентификатор
    facid integer NOT NULL, 
    --Наименование
    name character varying(100) NOT NULL, 
    --Стоимость слота(bookings.slots) для участника
    membercost numeric NOT NULL, 
    --Стоимость слота(bookings.slots) для гостя( memid = 0 )
    guestcost numeric NOT NULL, 
    --Первоначальные затраты
    initialoutlay numeric NOT NULL, 
    --Затраты на ежемесячное обслуживание
    monthlymaintenance numeric NOT NULL, 
    CONSTRAINT facilities_pk PRIMARY KEY (facid)
);
-- История заказов
CREATE TABLE cd.bookings
(
    --Идентификатор
    bookid integer NOT NULL, 
    --Ссылка на объекты
    facid integer NOT NULL, 
    --Ссылка на участников
    memid integer NOT NULL, 
    --Время начала использования объекта
    starttime timestamp NOT NULL,
    --Интервал использования объекта, выражается слотами, 1 слот - полчаса
    slots integer NOT NULL,
    CONSTRAINT bookings_pk PRIMARY KEY (bookid),
    CONSTRAINT fk_bookings_facid FOREIGN KEY (facid) REFERENCES cd.facilities(facid),
    CONSTRAINT fk_bookings_memid FOREIGN KEY (memid) REFERENCES cd.members(memid)
);