SQL-сервер, целостность данных - таблица, на которую ссылается множество таблиц

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

Изменить

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


person aikixd    schedule 04.08.2015    source источник
comment
Зачем вам нужно добавлять столбцы в вашу ссылочную таблицу для хранения данных о таблицах, на которые она ссылается? В этом нет смысла.   -  person Siyual    schedule 04.08.2015
comment
Я имел в виду добавление данных в сами ссылочные таблицы вместо создания сторонней таблицы, а не в ссылочную таблицу.   -  person aikixd    schedule 04.08.2015
comment
Пожалуйста, отредактируйте свой вопрос и предоставьте образцы данных. Это поможет прояснить, что вы пытаетесь сделать.   -  person Gordon Linoff    schedule 04.08.2015


Ответы (2)


Два очень гибких способа применения RI:

  1. Проверка ограничений — вы можете написать UDF, которые инкапсулируют логику, которую вы хотите применить, и ограничение просто проверяет UDF на истинность или ложность.

  2. Триггеры — логика RI записывается в код триггера.

person Tab Alleman    schedule 04.08.2015
comment
Есть ли плюсы и минусы у каждого из способов? - person aikixd; 04.08.2015
comment
В общем, нет. Ваш вопрос носит очень общий характер, поэтому вам нужно будет рассмотреть каждую конкретную потребность RI, которую вы хотите реализовать, и решить, какой из них лучше всего подходит в каждом случае. - person Tab Alleman; 04.08.2015
comment
Зачем начинать со сложных и потенциально ОЧЕНЬ дорогих подходов? Одной из конкретных проблем, для решения которых предназначены РСУБД, такие как SQL Server, является RI с использованием PK/FK. Он очень легкий и имеет мало шансов на расплавление, в отличие от ограничений, закодированных пользователем. Если таблица, на которую ссылаются, будет очень загружена, вы, вероятно, столкнетесь с проблемами производительности, которые будет очень сложно настроить. Дополнительные триггеры могут увеличить скорость роста журнала транзакций, поэтому вам также необходимо настроить это. Не понимаю, почему это хорошая отправная точка по сравнению с определением собственных ограничений PK/FK между таблицами. Что мне не хватает? - person SQLmojoe; 05.08.2015
comment
Я использую FK для отношений, но в этом конкретном случае мне нужна более сложная логика, чтобы я не терял след объектов, которые бессмысленны без своих дочерних элементов. - person aikixd; 06.08.2015

-> на него должно ссылаться несколько других таблиц.

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

-> Ссылочная таблица не может быть упрощена, чтобы соответствовать столбцам ссылочных таблиц.

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

person Jim Horn    schedule 04.08.2015