SQL Server + композитный ключ или уникальный идентификатор

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

Стол Country

 CountryID CountryName 

Language таблица

 LanguageID LangugageName 

Многие для многих – использование композитных:

 CountryID Pkey LanguageID Pkey 

ИЛИ

Использование уникального идентификатора:

 AutoID Pkey CountryID LanguageID 

Композитный ключ:

Комбинированный ключ представляет собой комбинацию из более чем одного столбца для идентификации уникальной строки в таблице. составной ключ может быть первичным ключом.

ОСНОВНОЙ КЛЮЧ

Ограничение PRIMARY KEY однозначно идентифицирует каждую запись в таблице базы данных.

поэтому все зависит от вашего требования

в первом дизайне

 Many to Many Table: Using composite: CountryID Pkey LanguageID Pkey 

если вы используете это представление, чем CountryID, а LanguageID – составной первичный ключ.ie здесь

данные таблицы будут

 CountryId LaguageID 1 1 //valid 1 2 //valid 1 3 //valid 1 1//not valid data as its form composite primary key 

и во втором проекте

 Using Unique Id: AutoID Pkey CountryID LanguageID 

AutoID становится первичным ключом, поэтому это позволит получать данные lke thsi

 AutoId CountryId LaguageID 1 1 1 //valid 2 1 2 //valid 3 1 3 //valid 4 1 1 //valid as AutoID is primary key 1 2 3 // invalid as AutoID is prinary key 

надеюсь, что эта презентация поможет вам понять разницу

каковы различия и последствия создания составного ключа и уникального идентификатора, например

Вам нужно создать «естественный» ключ в {CountryID, LanguageID}, чтобы избежать дублирования подключений в любом случае . Вопрос только в том, нужен ли вам также «суррогатный» ключ в {AutoID}?

Причины для суррогатного ключа:

  • Существуют таблицы для детей, которые ссылаются на эту таблицу соединений (и вы хотите, чтобы их FK были slim или предотвращали распространение CASCADE UPDATE).
  • Вы используете ORM, который любит простые ПК.

Если не применяются некоторые из этих причин, используйте только натуральный ключ.

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

См. Также: столбец в качестве первичного ключа или два внешних ключа в качестве первичного ключа .