"Является ли расширение первичных ключей составными ключами проблемой в Oracle или имеет побочные эффекты для существующих записей? Фактический первичный ключ не используется в качестве внешнего ключа, и все поля заполнены."
Oracle позволяет нам иметь составные первичные ключи.Они не являются проблемой с точки зрения отношений.
Единственное возражение против первичных составных ключей - это обычное возражение, заключающееся в том, что они делают отношения внешнего ключа и объединяют более громоздкими.Вы говорите, что в настоящее время у вас нет внешних ключей, которые ссылаются на эту таблицу.Тем не менее, я бы предложил вам определить синтетический (суррогатный) первичный ключ, используя индекс, и использовать составной ключ как уникальное ограничение.Потому что в будущем у вас вполне могут быть внешние ключи: ваше затруднительное положение показывает, что ваша текущая модель данных неверна или, по крайней мере, неполна.
«Я мог бы добавить новую запись для каждого кода жалобы, имеющего вторую часть ключа, являющуюся маркетинговым кодом» *
Умные клавиши тупые.При необходимости добавьте отдельный столбец для маркетингового кода.Это будет заполнено, если Маркетинг откроет свое собственное досье.Я не понимаю, почему его нужно связывать с кодом жалобы или составлять часть какого-либо первичного ключа (кроме таблицы поиска маркетингового кода).
Я признаю, что не полностью понимаю вашу модель данных илибизнес-логика, поэтому следующее может быть неправильно.Однако я думаю, что вам нужна таблица DOSSIERS, которая может иметь два типа досье:
- нормальное досье, идентифицированное с помощью DEPT_CODE и COMPLAINT_CODE
- Маркетинговое досье, которое, как я предполагаю, будет определено с помощью DEPT_CODE,COMPLAINT_CODE и MARKETING_CODE.
Уникальные ограничения допускают столбцы NULL, поэтому MARKETING_CODE может быть необязательным.Это еще одно преимущество использования одного вместо составного первичного ключа.
«Мне кажется, что при вводе новых кодов жалоб это может привести к ошибкам».
Вы имеете в виду создание новых жалоб?Или новые типы жалоб?Создание новых жалоб не должно быть проблемой: процесс создания обычных досье будет предлагать выбор COMPLAINT_CODES, где MARKETING_CODE равен нулю, тогда как процесс создания маркетинговых досье будет предлагать выбор COMPLAINT_CODES, где MARKETING_CODE не равен нулю.
Если вы говорите о добавлении новых типов жалоб, то я полагаю, что возникает вопрос: должен ли быть отдельный MARKETING_CODE для каждого обычного COMPLAINT_CODE?Я подозреваю, что нет.В этом случае вместо MARKETING_CODE, возможно, вам потребуется CODE_TYPE - значения NORMAL или MARKETING.