И.Д. Кособудский, Е.В. Третьяченко, И.Е. Шпак

Приложение А. Описание учебной базы данных

Связи между таблицами

В реляционных базах данных между таблицами, как уже было отмечено, существуют связи (отношения). Если между некоторыми сущностями существует связь, то факты из одной сущности ссылаются или некоторым образом связаны с фактами из другой сущности. Связь работает путем сопоставления первичного ключа одной таблицы (родительской сущности) с элементом внешнего ключа другой таблицы (дочерней сущности) [5]. Первичный ключ и соответствующий ему внешний ключ помогают реализовать отношение родитель-потомок между таблицами. В базе данных нужно хранить только актуальные, значимые связи.

Связи, как правило, могут различаться по типу (идентифицирующая, неидентифицирующая, полная и неполная категории, неспецифическая связь) и по, по мощности (один к одному, один ко многим и многие ко многим).,

допустимости пустых (NULL) значений.

Связь называется идентифицирующей, если экземпляр дочерней сущности идентифицируется (однозначно определяется) через ее связь с родительской сущностью. Атрибуты, составляющие первичный ключ родительской сущности, при этом входят в первичный ключ дочерней сущности. Дочерняя сущность при идентифицирующей связи всегда является зависимой.

Связь называется неидентифицирующей,если экземпляр дочерней сущности идентифицируется иначе, чем через связь с родительской сущностью. Атрибуты, составляющие первичный ключ родительской сущности, при этом входят в состав неключевых атрибутов дочерней сущности.

Мощность связи представляет собой отношение количества экземпляров родительской сущности к соответствующему количеству дочерней сущности. По мощности связи выделяют отношения «один к одному», «один ко многим», «многие ко многим».

При связи «один к одному» одной строке родительской таблицы может соответствовать не более одной строки дочерней таблицы (и наоборот). Такая связь создается, если оба связанных столбца являются первичными ключами или имеют ограничение, обеспечивающее их уникальность. Связи этого типа встречаются редко, поскольку связанную подобным образом информацию обычно удается поместить в одной таблице.

«Один ко многим» – наиболее распространенный вид связи. При этом типе связи одной строке родительской таблицы может соответствовать множество строк дочерней таблицы, но любой строке дочерней таблицы может соответствовать только одна строка родительской таблицы.

Обратимся к учебной базе данных. Все связи между таблицами учебной базы данных являются неидентифицирующими с мощностью «один ко многим». Рассмотрим, например, связь «один ко многим» между таблицами Street и Abonent (рис. 1.3).

Из рис. 1.3 следует, что в столбце StreetCD таблицы Abonent содержится идентификатор улицы, на которой проживает абонент. Столбец StreetCD в таб­лице Abonent представляет собой внешний ключ, ссылающийся на одноименный столбец таблицы Street. Доменом этого столбца (множеством значений, которые могут в нем храниться) является множество идентификаторов улиц, содержащихся в столбце StreetCD таблицы Street. Мощность отношения «один ко многим», так как на одной и той же улице может проживать (и проживает) множество абонентов, но каждый абонент проживает только на одной определенной улице. Наименование улицы, на которой проживает, например, абонент Аксенов С.А., можно узнать, определив значение столбца StreetCD в строке таблицы Abonent со значением в столбце Fio, равным 'Аксенов С.А.' (число 3) и затем отыскав в таблице Street строку с таким же значением в столбце StreetCD (улица ВОЙКОВ ПЕРЕУЛОК). Например, чтобы найти всех абонентов, проживающих на улице ВОЙКОВ ПЕРЕУЛОК, следует запомнить значение столбца StreetCD для этой улицы (число 3), а потом просмотреть таблицу Abonent и найти все строки, в столбце StreetCD которых содержится число 3 (это строки для абонентов с номерами лицевых счетов '005488', '015527' и '115705').

Рис. 1.3. Связь «один ко многим» между таблицами Street и Abonent

Таким образом, отношение «один ко многим», существующее между улицами и проживающими на них абонентами, в реляционной модели реализовано в виде одинаковых значений данных, хранящихся в двух таблицах. Все отношения, существующие между таблицами реляционной базы данных, реализуются в таком виде.

При связи «многие ко многим» (неспецифическое отношение) одной строке родительской таблицы может соответствовать множество строк дочерней таблицы (и наоборот). Такая связь создается с помощью третьей таблицы, первичный ключ которой состоит из внешних ключей таблиц, связанных отношением «многие ко многим».

Расчет и оплата коммунальных платежей при кажущейся элементарности сервиса — важная составляющая повседневного быта граждан. Каждый из нас для удовлетворения своих жизненных потребностей пользуется жилищными услугами, расходует коммунальные ресурсы.Компании, оказывающие такие услуги и поставляющие коммунальные ресурсы, ежемесячно производят расчет платы за них, а обязанность граждан регулярно их оплачивать.

Учебная БД представляет собой очень упрощенный пример информационной модели расчетно-аналитической компоненты расчетно-платежного комплекса «Абонент+», которая используется для информационного обеспечения деятельности организаций по оказанию населению жилищно-коммунальных услуг и расчетам за них [3].

Учебная БД состоит из 8 таблиц: 5 таблиц-справочников и 3 информационных таблиц.

В учебной БД используются такие таблицы-справочники:

§ Street. Справочник улиц, в домах которых проживают абоненты. Поля таблицы:

StreetCD – уникальный код улицы (первичный ключ);

StreetNM – название улицы, расшифровывающее код улицы.

§ Abonent. Справочник абонентов. Поля таблицы:

AccountCD – номер лицевого счета абонента, уникальным образом идентифицирующий каждого из абонентов (первичный ключ);

StreetCD – код улицы, на которой проживает абонент (внешний ключ, ссылающийся на первичный ключ таблицы Street);

HouseNo – номер дома, в котором проживает абонент;

FlatNo – номер квартиры;

Fio – фамилия, имя и отчество абонента в формате «Фамилия И.О.»;

Phone – номер телефона.

§ Services. Справочник услуг, оказываемых абонентам жилищно-коммунальными организациями. Поля таблицы:

ServiceCD – код услуги (первичный ключ);

ServiceNM – наименование услуги.

§ Disrepair. Справочник типовых неисправностей газового оборудования абонентов. Поля таблицы:

FailureCD – код неисправности газового оборудования (первичный ключ);

FailureNM – наименование неисправности газового оборудования.

§ Executor. Справочник исполнителей заявок, поданных абонентами на ремонт газового оборудования. Исполнителями являются работники ремонтной службы газораспределительной организации, оказывающей соответствующие услуги. Поля таблицы:

ExecutorCD – уникальный код, идентифицирующий исполнителей ремонтных заявок (первичный ключ);

Fio – фамилия, имя и отчество исполнителя в формате «Фамилия И.О.».

В качестве информационных таблиц учебной БД выделены следующие таблицы:

§ NachislSumma. Таблица для хранения информации о размерах ежемесячных начислений плат абонентам за оказанные им услуги (которые расшифровываются в справочнике услуг Services). Оплата за ремонт газового оборудования производится по факту оказания услуги, и начисление за него не производится. Поля таблицы:

NachislFactCD – уникальный идентификатор факта начисления (первичный ключ);

AccountCD – номер лицевого счета абонента, которому было сделано начисление (внешний ключ, ссылающийся на первичный ключ таблицы Abonent);

ServiceCD – код услуги, за которую выполнено начисление (внешний ключ, ссылающийся на первичный ключ таблицы Services);

NachislSum – значение начисленной суммы;

NachislMonth – номер месяца, за который произведено начисление;

NachislYear – год, за месяц которого выполнено начисление.

§ PaySumma. Таблица для хранения значений оплат, внесенных абонентами за оказанные им услуги. Для каждого факта оплаты по какой-либо услуге указывается дата осуществления оплаты, оплачиваемые месяц и год. Поля таблицы:

PayFactCD – уникальный идентификатор факта оплаты по услуге Request (первичный ключ);

AccountCD – номер лицевого счета абонента, оплатившего оказанную ему услугу (внешний ключ, ссылающийся на первичный ключ таблицы Abonent);

ServiceCD – код оплаченной услуги (внешний ключ, ссылающийся на первичный ключ таблицы Services);

PaySum – значение оплаченной суммы;

PayDate – дата оплаты;

PayMonth – номер оплачиваемого месяца;

PayYear – оплачиваемый год.

Таким образом, при сопоставлении этой информации по конкретному

абоненту с данными, хранящимися в таблице NachislSum­ma, можно вы

числить размер долга (дебет) или переплаты (кредит) у данного абонента

на указанный месяц года.

§ Request. Таблица для хранения информации о заявках абонентов на ремонт газового оборудования. Каждая ремонтная заявка характеризуется номером лицевого счета абонента (расшифровка в справочнике Abonent), заявившего определенную неисправность газового оборудования (расшифровка в справочнике Disrepair) в его доме или квартире, исполнителем ремонтной работы (справочник Executor), датой регистрации заявки, датой выполнения ремонта и признаком погашения (1/0). Поля таблицы:

RequestCD – уникальный код ремонтной заявки (первичный ключ);

AccountCD – номер лицевого счета абонента, подавшего данную ремонтную заявку (внешний ключ, ссылающийся на первичный ключ таблицы Abonent);

FailureCD – код неисправности газового оборудования, заявленной абонентом в данной ремонтной заявке (внешний ключ, ссылающийся на первичный ключ таблицы Disrepair);

ExecutorCD – код исполнителя, ответственного за выполнение данной ремонтной заявки (внешний ключ, ссылающийся на первичный ключ таблицы Executor);

IncomingDate – дата поступления заявки;

ExecutionDate – дата выполнения заявки;

Executed – поле логического типа, признак того, погашена заявка или нет.

В общем случае зарегистрированная ремонтная заявка может быть:

- не назначена ни одному из исполнителей, а следовательно не выполнена и не погашена;

- назначена одному из исполнителей, но не выполнена им, а следовательно и не погашена;

- назначена одному из исполнителей, выполнена им, но не погашена;

- назначена одному из исполнителей, выполнена им и погашена.

ER-модели учебной БД на логическом и физическом уровнях представлены соответственно на рис. 1.5 и 1.6.

Для поддержания правил ссылочной целостности, реализующих запрет удаления записи в родительской таблице при наличии связанных записей в дочерних таблицах, в учебной базе данных определены следующие триггеры.

Td_Abonent. Триггер запускается после удаления строки в таблице Abonent. Если в таблицах NachislSumma или PaySumma имеются записи с внешним ключом AccountCD, ссылающимся на удаляемую строку таблицы Abonent, то триггер вызывает исключение Del_Restrict и операция удаления прерывается.

Td_Services. Триггер запускается после удаления строки в таблице Services. Если в таблицах PaySumma или NachislSumma имеются записи с внешним ключом ServiceCD, ссылающимся на удаляемую строку в таблице Services, то триггер вызывает пользовательское исключение Del_Restrict и прерывает выполнение операции.

Текст определения описанных триггеров приведен в скрипте по созданию учебной БД.

Ниже приводится содержимое всех таблиц учебной БД. Все запросы, приведенные в пособии, выполнены именно над этими данными, и их полное указание поможет проанализировать логику получения результатов.

Таблица А.1. Данные таблицы Street

StreetCD StreetNM
  ЦИОЛКОВСКОГО УЛИЦА
  НОВАЯ УЛИЦА
  ВОЙКОВ ПЕРЕУЛОК
  ТАТАРСКАЯ УЛИЦА
  ГАГАРИНА УЛИЦА
  МОСКОВСКАЯ УЛИЦА
  КУТУЗОВА УЛИЦА
  МОСКОВСКОЕ ШОССЕ

Таблица А.2. Данные таблицы Abonent

AccountCD StreetCD HouseNo FlatNo Fio Phone
        Аксенов С.А.  
        Конюхов В.С.  
        Шубина Т.П.  
        Тимошкина Н.Г.  
        Лукашина Р.М.  
        Мищенко Е.В.  
        Маркова В.П.  
        Свирина З.А. NULL
        Шмаков С.В. NULL
        Денисова Е.К.  
        Стародуб­цев Е.В.  
        Тулупова М.И.  

Таблица А.3. Данные таблицы Services

ServiceCD ServiceNM
  Газоснабжение
  Электроснабжение
  Теплоснабжение
  Водоснабжение

Таблица А.4. Данные таблицы Disrepair

FailureCD FailureNM
  Засорилась водогрейная колонка
  Не горит АГВ
  Течет из водогрейной колонки
  Неисправна печная горелка
  Неисправен газовый счетчик
  Плохое поступление газа на горелку плиты
  Туго поворачивается пробка крана плиты
  При закрытии краника горелка плиты не гаснет
  Неизвестна

Таблица А.5. Данные таблицы Executor

ExecutorCD Fio
  Стародубцев Е.М.
  Булгаков Т.И.
  Шубин В.Г.
  Шлюков М.К.
  Школьников С.М.

Таблица А.6. Данные таблицы NachislSumma

NachislfactCD AccountCD ServiceCD NachislSum NachislMonth NachislYear
           
           
           
           
           
      18,3    
           
           
           
           
           
      58,7    
           
           
      58,7    
           
      38,5    
      58,7    
      28,32    
      19,56    
      10,6    
      38,28    
      38,32    
      37,15    
      12,6    
      25,32    
      57,1    
      8,3    
      62,13    
      37,8    
      17,8    
      22,56    
      15,3    
      32,56    
      12,6    
      37,15      
      58,1      
      28,32      
      18,32      
      21,67      
      22,86      
      60,1      
      28,32      
      22,2      
                   

Окончание табл. А.6.

NachislfactCD AccountCD ServiceCD NachislSum NachislMonth NachislYear
      25,3      
      38,32      
      8,3      
      37,15      
      18,3      
      279,8      
      266,7      
      343,36      
      271,6      
      278,25      
      254,4      
      258,8      
      239,33      
      179,9      
      180,13      
      238,8      
      237,38    
      349,19    
           
      346,18    
      290,33    
      580,1    
      611,3    
      444,34    
      453,43    
      454,6    
      553,85    
      435,5    
      349,38    
      418,88    
      528,44    
      466,69    
      444,45    
      480,88    
      500,13    
                   

Таблица А.7. Данные таблицы PaySumma

PayFactCD AccountCD ServiceCD PaySum PayDate PayMonth PayYear
      58,7 08.01.2012    
        06.01.2011    
        06.05.2013    
        10.02.2010    
        03.10.2011    

Продолжение табл. А.7.

PayFactCD AccountCD ServiceCD PaySum PayDate PayMonth PayYear
        13.06.2011    
        12.02.2013    
        22.06.2011    
        26.11.2012    
        21.11.2011    
        03.01.2012    
      58,5 19.07.2011    
        06.10.2010    
      58,7 04.09.2011    
      58,7 01.12.2011    
        03.10.2011    
      38,5 13.09.2011    
        05.02.2012    
        03.08.2012    
      19,56 02.04.2012    
        03.10.2012    
      38,28 04.02.2013    
        07.05.2013    
      37,15 04.11.2013    
        20.09.2010    
      25,32 03.02.2013    
        05.03.2012    
      8,3 10.09.2013    
        03.05.2010    
      37,8 12.07.2011    
        10.07.2012    
      22,56 25.06.2013    
      15,3 08.09.2010    
      32,56 18.10.2011    
      12,6 22.05.2012    
      37,15 23.12.2013    
      58,1 07.01.2011    
      28,32 08.02.2011    
        18.03.2012    
      19,47 10.04.2013    
      22,86 04.05.2010    

Окончание табл. А.7.

PayFactCD AccountCD ServiceCD PaySum PayDate PayMonth PayYear
        07.06.2011    
      28,32 05.03.2012    
      22,2 10.08.2013    
      25,3 10.09.2011    
      38,32 09.10.2011    
      8,3 14.11.2012    
      37,15 10.08.2013    
        07.01.2011    
        10.06.2012    
        11.03.2013    
        15.12.2013    
      271,6 12.03.2013    
        06.12.2013    
      254,4 10.08.2011    
      258,8 08.03.2013    
      239,35 11.06.2013    
      179,9 01.05.2012    
      180,13 21.10.2013    
        04.04.2010    
        06.04.2011    
      349,19 14.07.2012    
      346,18 13.08.2012    
        09.04.2013    
      580,1 08.08.2012    
      611,3 03.11.2013    
      444,5 18.04.2011    
        14.07.2012    
        12.05.2013    
      553,85 02.02.2012    
      435,5 12.07.2012    
      349,38 18.05.2011    
        09.07.2012    
      528,44 26.11.2013    
      466,69 03.06.2012    
      444,45 16.11.2013    
        05.09.2011    

Таблица А.8. Данные таблицы Request

RequestCD AccountCD ExecutorCD FailureCD IncomingDate ExecutionDate Executed
        17.12.2011 20.12.2011  
        07.08.2011 12.08.2011  
        28.02.2012 08.03.2012  
        31.12.2011 NULL  
        16.06.2011 24.06.2011  
        20.10.2012 24.10.2012  
        06.11.2011 08.11.2011  
        01.04.2011 03.04.2011  
        12.01.2013 12.01.2013  
        08.08.2011 10.08.2011  
        04.09.2010 05.12.2010  
        04.04.2013 13.04.2013  
        20.09.2010 23.09.2010  
    NULL   28.12.2011 NULL  
        15.08.2011 06.09.2011  
        28.12.2012 04.01.2013  
        17.12.2011 27.12.2011  
        11.10.2011 11.10.2011  
        13.09.2011 14.09.2011  
        18.05.2011 25.05.2011  
        07.05.2011 08.05.2011  

Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: