2014-11-16 3 views
2

Я получил этот составной первичный ключ в таблице 1:Как ссылаться на составной первичный ключ в одно поле?

Table 1: Applicant 

CreationDate PK 
FamilyId PK 
MemberId PK 

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

Table 2: Sales 

SalesId int, 
ApplicantId -- This should be "CreationDate-FamilyId-MemberId" 

Каковы возможные способы достижения этого?

Примечания: Я знаю, что я могу создать еще одно поле в таблице 1, с конкатенацией три колонок, но тогда я буду иметь избыточную информацию

+3

Боюсь, что вы не можете сделать это точно так, как хотите. Просто добавьте столбец идентификатора в таблицу «Заявитель» и сделайте этот первичный ключ, а затем добавьте некластеризованный уникальный индекс на другие три. – Alireza

+1

Хотя можно было как-то заставить его - вам пришлось бы сравнить строку (часть) с датой (возможно) некоторым числом (-ами) или их комбинацией. Таким образом, вы должны либо следовать Alireza, либо сохранять отдельные столбцы в целости. – Abecee

+1

Попытка сделать это, как указано, на самом деле является нарушением практики нормализации, потому что в итоге вы получаете ключи с несколькими частями. С этим все проблемы, не делайте этого. Сделайте то, что говорит @Alireza, и создайте суррогатный идентификатор (возможно, другое автоматически сгенерированное поле). –

ответ

1

Что вы просите за это равносильно сказать: «Я хочу, чтобы рассматривать три части информации как один фрагмент информации, без явного представления ее одной части информации ». Это значит, что это невозможно.

Тем не менее, есть способы, чтобы сделать случиться, что вы хотите, чтобы произошло

  • Создать суррогатный ключ (т.е. столбец идентификаторов) и использовать его в качестве ссылки FK
  • Создать вычисляемый столбец, который является конкатенация трех столбцов и использование этого в качестве ссылки FK

Все остальные будучи равными (простота внедрения, политика и т. д.), я бы предпочел первый. То, что у вас есть, действительно является естественным ключом и не делает хорошего ПК, если на него будет ссылаться внешне. Это не означает, что вы не можете обеспечить уникальность уникальным ключом; вы можете и должны.

Смежные вопросы