Когда ссылочная целостность не является соответствующей?

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

Я предполагаю, что это попало бы в несколько дополнительных вопросов:

  1. Когда ссылочная целостность не является соответствующей?
  2. Действительно ли уместно иметь поля, содержащие несколько и/или возможно неполные подмножества списка внешнего ключа?
  3. Как правило, это должно быть проектным решением структуры схемы или решением дизайна интерфейса? (Или возможно ни один или оба)

Мысли?

15
задан Curtis Inderwiesche 2 February 2010 в 22:44
поделиться

5 ответов

Когда ссылочная целостность не подходит?

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

Уместно ли иметь поля, содержащие несколько и / или, возможно, неполные подмножества списка внешнего ключа?

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

Как правило, это должно быть решение по дизайну структуры схемы или решение по дизайну интерфейса? (Или, возможно, ни то, ни другое)

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

Только мои мысли.

18
ответ дан 1 December 2019 в 01:30
поделиться

Единственный случай, о котором я слышал, - это если вы собираетесь загрузить огромное количество данных в свою базу данных; в этом случае может иметь смысл отключить ссылочную целостность, если вы точно знаете, что данные действительны. После завершения загрузки / миграции следует снова включить ссылочную целостность.

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

Под «правилами проверки» я имею в виду такие правила, как «количество товаров в корзине> 0». Вы можете захотеть или не захотеть правила проверки. Но я думаю, что первичные / внешние ключи всегда важны (или позже вы обнаружите, что хотите, чтобы они у вас были). Я думаю, что они необходимы, если вы хотите в какой-то момент выполнить репликацию.

7
ответ дан 1 December 2019 в 01:30
поделиться
  1. Когда ссылочная целостность не подходит?

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

  2. целесообразно ли иметь поля, содержащие несколько и / или, возможно, неполные подмножества списка внешнего ключа?

    Дублирующие данные таким образом против концепции нормализация. Есть есть Преимущества и недостатки для этого подход.

  3. Как правило, должно ли это быть решением дизайна структуры схемы или решением дизайна интерфейса? (Или, возможно, ни один или оба)

    Я бы рассмотрел это дизайн схемы решение. Думать о лучшем пути Чтобы моделировать вашу проблему в реляционном термины. Используйте базу данных в пути был предназначен.

4
ответ дан 1 December 2019 в 01:30
поделиться

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

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

путем «правил валидации», я говорю о таких правилах, как «предметы в корзине»> 0 '. Вы можете или не можете хотеть правила проверки. Но я думаю, что первичные / иностранные ключи всегда важны (или вы могли бы найти позже, что вы желаете их иметь их). Я думаю, что они требуются, если вы хотите сделать репликацию в какой-то момент.

-121--2381830-

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

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

4
ответ дан 1 December 2019 в 01:30
поделиться
  1. Никогда, хотя некоторые люди в NoSQL, многозначные и oo-db области не будут чувствовать себя по-другому. Не слушайте их, они ошибаются.
  2. Да. Например, если транспортное средство уникально идентифицировано как (lotid,vin), то lotid - это инородный ключ к таблице лотов. Если вы хотите найти все картинки для лота, вы можете присоединиться к таблице транспортных средств прямо к таблице лотов, используя подмножество ключа (lotid in (lotid,vin)). Или я вас не понимаю?
  3. Схема, интерфейс на втором месте. Если схема плохая, то наличие хорошего интерфейса не является долгосрочной целью.
2
ответ дан 1 December 2019 в 01:30
поделиться
Другие вопросы по тегам:

Похожие вопросы: