Читаем Firebird РУКОВОДСТВО РАЗРАБОТЧИКА БАЗ ДАННЫХ полностью

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

! ! !

СОВЕТ. Селективность индекса довольно подробно обсуждается в главе 18. Если эта тема для вас новая, то это может вас заставить основательно разобраться в данном вопросе до принятия решения реализовывать отношение один- ко-многим в вашей модели данных с использованием формальных ограничений целостности "только потому, что я могу".

. ! .

При написании пользовательских ссылочных триггеров вы должны убедиться, что ваши собственные триггеры или ваше приложение будут поддерживать ссылочную целостность при изменении данных в любом ключе. Триггеры более безопасны, чем код приложений, поскольку они централизуют правила целостности данных в базе данных и поддерживают их для всех типов доступа к данным, будь то программы, утилиты, скрипты или приложение серверного уровня[50].

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

<p>Таблицы соответствия и ваша модель данных</p>

Мы часто используем таблицы соответствия (lookup tables) - также называемые управляющими таблицами (control tables) или таблицами определения (definition tables) - для хранения статичных строк, которые могут содержать расширенные тексты, коэффициенты преобразования, а также нечто подобное выходным наборам, часто получаемым в приложениях как списки выбора. Примерами являются таблицы "типов", которые содержат сущности, такие как типы счетов или типы документов, таблицы "коэффициентов", используемые для преобразования валют или вычисления налогов, и таблицы "соответствия кодов", хранящие такие элементы, как коды, соответствующие цвету. Динамичные таблицы связаны с такими статичными таблицами через соответствие ключа первичному ключу статичных таблиц.

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

В реализованных базах данных такое отношение не является отношением главная- подчиненная, или родитель-потомок, потому что значение первичного ключа у набора соответствия требует одного и только одного столбца. Это не влияет на другие отношения, в которых участвует этот "псевдопотомок".

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

Посмотрите на следующий пример отношения соответствия, являющийся наследием конвертирования очень плохо спроектированного приложения для Access в Firebird. Клиентские приложения Access могут выполнять изящные действия с целыми таблицами, которые позволяют дилетантам создавать приложения RAD. Эта таблица была использована в визуальном управляющем элементе, который мог отображать таблицу и "перемещать" значение в другую таблицу при щелчке по кнопке.

CREATE TABLE COLORS (COLOR CHARACTER(20) NOT NULL PRIMARY KEY);

Фрагмент DDL одной из таблиц, которая использует COLORS В качестве таблицы соответствия:

CREATE TABLE STOCK_ITEM (

. . .

COLOR CHARACTER(20) DEFAULT 'NEUTRAL',

. . .

CONSTRAINT FK_COLOR FOREIGN KEY (COLOR)

REFERENCES COLORS(COLOR)

ON UPDATE CASCADE

ON DELETE SET DEFAULT;

Существует множество проблем с этим ключом. Во-первых, таблица COLORS была доступна покупателям товаров для ее редактирования, как они считали нужным. Изменения выполнялись каскадно по всей системе всякий раз, когда новые элементы добавлялись в ассортимент. Удаления часто убирают информацию о цвете в относительно небольшом количестве элементов, в которых она используется. Хуже того, основная масса элементов в системе имела один цвет 'NEUTRAL', в результате чего индекс внешнего ключа ухудшал выполнение запросов.

"Реляционный путь" - устранение незапланированных нарушений данных за счет использования ключа соответствия, который будет содержать не имеющие смысл данные (т. е. атомарный ключ):

Перейти на страницу:

Похожие книги

1С: Бухгалтерия 8 с нуля
1С: Бухгалтерия 8 с нуля

Книга содержит полное описание приемов и методов работы с программой 1С:Бухгалтерия 8. Рассматривается автоматизация всех основных участков бухгалтерии: учет наличных и безналичных денежных средств, основных средств и НМА, прихода и расхода товарно-материальных ценностей, зарплаты, производства. Описано, как вводить исходные данные, заполнять справочники и каталоги, работать с первичными документами, проводить их по учету, формировать разнообразные отчеты, выводить данные на печать, настраивать программу и использовать ее сервисные функции. Каждый урок содержит подробное описание рассматриваемой темы с детальным разбором и иллюстрированием всех этапов.Для широкого круга пользователей.

Алексей Анатольевич Гладкий

Программирование, программы, базы данных / Программное обеспечение / Бухучет и аудит / Финансы и бизнес / Книги по IT / Словари и Энциклопедии
1С: Управление торговлей 8.2
1С: Управление торговлей 8.2

Современные торговые предприятия предлагают своим клиентам широчайший ассортимент товаров, который исчисляется тысячами и десятками тысяч наименований. Причем многие позиции могут реализовываться на разных условиях: предоплата, отсрочка платежи, скидка, наценка, объем партии, и т.д. Клиенты зачастую делятся на категории – VIP-клиент, обычный клиент, постоянный клиент, мелкооптовый клиент, и т.д. Товарные позиции могут комплектоваться и разукомплектовываться, многие товары подлежат обязательной сертификации и гигиеническим исследованиям, некондиционные позиции необходимо списывать, на складах периодически должна проводиться инвентаризация, каждая компания должна иметь свою маркетинговую политику и т.д., вообщем – современное торговое предприятие представляет живой организм, находящийся в постоянном движении.Очевидно, что вся эта кипучая деятельность требует автоматизации. Для решения этой задачи существуют специальные программные средства, и в этой книге мы познакомим вам с самым популярным продуктом, предназначенным для автоматизации деятельности торгового предприятия – «1С Управление торговлей», которое реализовано на новейшей технологической платформе версии 1С 8.2.

Алексей Анатольевич Гладкий

Финансы / Программирование, программы, базы данных