ЭЛЕКТРОННАЯ БИБЛИОТЕКА КОАПП
Сборники Художественной, Технической, Справочной, Английской, Нормативной, Исторической, и др. литературы.


Смотрите информацию SvsTime купить часы тут.

 

Технология управления данными. Советы для начинающих программистов

               Как проектировать реляционную базу данных
                                 
                                                  Алан Шварц
                                                          
     Почему используется реляционная база данных? Пусть вам необходимо
срество для отслеживания уплаты ренты. Если  вы  разложите  данные  по
пользователям,  операциям и средствам в одну таблицу, это причинит Вам
немало хлопот. Суммирование значений по каждому покупателю  и  каждому
виду платежа включает все новый и новый ввод данных, что вызывает неп-
роизводительную  трату  времени  и дисковой памяти. Помимо этого, одна
таблица не оставляет места человеческой ошибке - если инициалы пользо-
вателя введены однажды, но не при последующих обращениях, вы не сможе-
те сгенерировать точные отчеты. И если вы произведете сложение рабочих
полей по каждой операции, вы столкнетесь с трудностями при  документи-
ровании.  Решение  заключается  в хранении информации о пользователях,
операций и результатов в отдельных таблицах и установлении связей меж-
ду ними.
     Когда две таблицы имеют реляционную связь, перемещение по записям
одной таблицы (порождающей) влечет за собой соответствующее  перемеще-
ние  по  записям  в другой (порождаемой). То есть, пока вы работаете с
отдельной операцией, текущая запись в таблице пользователей будет пос-
тоянно содержать данные по  пользователю  этой  операции.  Реляционная
связь  требует,  чтобы  две таблицы имели часть общих данных - обычно,
хотя и не обязательно - одно поле.
     В DBASE, где каждая таблица - собственный файл данных,  вы  могли
бы  назвать таблицы CUSTOMER.DBF, TRANS.DBF и PRODUCT.DBF. Перед уста-
новлением связи порождаемый файл должен быть проиндексирован  по  тому
полю, по которому он связан с порождающим. Затем использованием коман-
ды  SET RELATION устанавливается текущая связь. Например, для построе-
ния связи от TRANS.DBF к CUSTOMER.DBF вам следовало бы вводить  коман-
ды, подобные следующим, полагая, что оба файла данных имеют идентичные
поля под названием CustID:

     SELECT 1
     USE Customer INDEX CustID
     SELECT 2
     USE Trans INDEX Transcust,Transprod
     SET RELATION TO CustID INTO Customer
     

     
        РАЗУМНОЕ  ПРОЕКТИРОВАНИЕ ОЗНАЧАЕТ МОЩНОСТЬ БАЗЫ ДАННЫХ
                   
 ЙНННННННННН»      ЙНННННННННН»       ЙНННННННННН»     ЙННННННННН»
 є          є      є          є       є          є     є         є
 є  TRANS   є      є CUSTOMER є       є  TRANS   є     є PRODUCT є
 МНННННННННН№      МНННННННННН№       МНННННННННН№     МННННННННН№
 є          є      єИдентифи- є       єИдентифи- є     єИдентифи-є
 є Операция є      єкатор польє<ДДДДДДєкатор польє  ЪД>єкатор проє
 ИННННННННННј      єзователя  є       єзователя  є  і  єдукции   є
 ЪДДДДДДДДДДї      МНННННННННН№       МНННННННННН№  і  МННННННННН№
 і   Имя    і      є          є       єИдентифи- є  і  є         є
 ГДДДДДДДДДДґ      є   Имя    є       єкатор про-ЗДДЩ  є Описаниеє
 і          і      МНННННННННН№       єдукции    є     МННННННННН№
 іАдрес и дрі      є          є       МНННННННННН№     є         є
 АДДДДДДДДДДЩ      єАдрес и дрє       єДата опе- є     є Катего- є
 ЙНННННННННН»      ИННННННННННј       єрации и дрє     є рия и дрє
 є Продукцияє                         ИННННННННННј     ИНННННННННј
 УННННННННННј
 ЪДДДДДДДДДДї
 і Описание і
 ГДДДДДДДДДДґ
 і          і   ЪДДї
 і Категорияі   і  і  - избыточные  данные
 АДДДДДДДДДДЩ   АДДЩ
 ЙНННННННННН»
 єДата опе- є
 єрации и дрє
 ИННННННННННј
       
       Попытка представления всех ваших данных в одной таблице (слева)
  приводит  к избыточности данных. Лучше сформировать несколько таблиц
  для представления данных и использовать указатели отношений для свя-
  зи между ними.
  
--------------------------------------------------------------------
       
       
     Тогда при любом обращении к другой операции запись текущего поль-
зователя была бы единственной,  поле  CustID  которой  идентично  полю
CustID текущей операции. Тo ecть, команда:
  
  ? CUSTOMER -> Name
       
возвращает имя пользователя текущей операции. Этот принцип применяется
ко всем действиям с базами данных, включая работу с экранами, списками
и отчетами.
     Для  полей,  используемых  для связывания таблиц, не требуются ни
такое же имя, ни 100-процентная  идентичность  данных.  DBASE-операция
EXACT  -  один из способов проверки того, насколько точно должны соот-
ветствовать поля. При EXACT OFF (oтмена)  операция  с  идентификатором
пользователя  "АС-1"  могла  бы  вызвать обращение к пользователю, чей
идентификатор - "АС-12"; при EXACT ON требуется  точное  соответствие.
Выбор значения ЕXACT ON или OFF зависит от ситуации, но вы всегда дол-
жны знать, какое значение вы присвоили EXACT оператором SET EXACT.
     Для того, чтобы учесть имя пользователя и результат каждой опера-
ции, вам необходимо установить отношения между базой  данных  TRANS  и
обоими другими файлами. DBASE III Plus допускает только одно отношение
порождения, но это можно обойти, полагая, что порождающий файл - один,
в то время как на самом деле - другой, как показано ниже:

     SELECT 3
     USE Product INDEX ProdID
     SELECT Customer
     SET RELATION TO Trans->ProdID INTO Product
     SELECT Trans
     SET RELATION TO CustID INTO Customer
     
     Для  всех  практических применений база данных TRANS является по-
рождающей в обоих отношениях. Но поскольку отношение с  PRODUCT  уста-
новлено,  пока выбрана база CUSTOMER, DBASE позволяет второе отношение
между TRANS и CUSTOMER.
     Такая хитрость не является необходимой  для  DBASE  IV,  Foxbase,
FoxPro  или Clipper. Эти пакеты разрешают множественные отношения, та-
кие как:

     SET RELATION TO ProdID INTO Product, TO CustID INTO Customer ,
     
       Это лучшее средство для установления отношений.
     Конечно,  программисты часто пользуются более чем одним средством
одновременно, требуя установить отношение один-к-многим между TRANS  и
PRODUCT. Перенесем, впрочем, эту беседу на другое время.


Яндекс цитирования