Модели и проектирование баз данных


Бизнес-правила и ограничения целостности


. Пусть в нашей ПО действуют следующие правила:

· номер поставщика уникален;

·  номер изделия уникален;

·  номер вида детали уникален;

·  номер поставщика должен иметь вид ‘Sх’, где х любая последовательность цифр;

·  номер вида изделия должен иметь вид ‘Jх’, где х любая последовательность цифр;

·  номер вида детали должен иметь вид ‘Pх’, где х любая последовательность цифр;

·  значение статуса поставщика может быть только целым, кратным 5 в диапазоне 5 ¸100;

·  цвет детали должен выбираться из определенного списка;

·  названия городов должны выбираться из определенного списка;

·  красные детали хранятся только в Яе;

·  если город поставщика Яя, то его статус 50;

·  конкретный поставщик может в течение одного дня поставить конкретную деталь для конкретного изделия только однажды;

·  количество деталей в одной поставке не может быть меньше 100 или больше 1000;

·  месячный объем поставки любой детали не может превосходить 10000.

Если в нашей БД есть, например, кортеж {(номер поставщика, ‘S1’), (название поставщика, ‘Рога и копыта’), (статус, 100), (город размещения, ‘Черноморск’)}[15], то он имеет вполне осмысленную интерпретацию в терминах ПО, если значение S# = ‘S1’ встречается только в этом кортеже и Черноморск включен в список городов. Если такого названия нет в списке, то и кортеж осмысленной интерпретации не имеет.

Если мы просуммируем значения поля Qt во всех строках таблицы SPJ, в которых значение P#  = ‘P1’, а значения дат лежат в интервале от 01.03.98 до 31.03.98, и увидим, что эта сумма больше 10000, то либо наши данные ошибочны (этого не должно быть по правилам), либо кто-то из служащих нарушил правила.

Подобных правил в любой ПО очень много. Они подчас бывают очень сложными и действуют независимо от способа хранения данных – на бумаге, на диске, … Если они соблюдаются, то гарантирована интерпретируемость данных. Как все правила, они формальны. Их можно сформулировать в виде предикатов и реализовать алгоритмы вычисления значений этих предикатов на текущих значениях хранимых данных.


- Начало -  - Назад -  - Вперед -