Два Первичных Ключа

this

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

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

  1. один первичный ключ или
  2. составной ключ

это будет использоваться как внешний ключ.

Я знаю, что могу используйте BrandNo как внешний ключ и покажите BrandName, но ради знания (и да, конечно) я хочу знать, что

можно ли использовать два атрибута таблицы в качестве внешних ключей отдельно в разных таблицах?

EDITTED

BrandNo как раз серийный номер и фирменное наименование может быть именем любого Тавра. BrandNo требуется в 4 таблицах, как показано, тогда как BrandName требуется только в одной таблице. Спасибо!

3 ответов


Да, это вполне возможно. Предполагая, что BrandName является ключом-кандидатом сам по себе, то в принципе вы можете ссылаться на него точно так же, как BrandNo. В этом случае BrandName и BrandNo не будут составным ключом, они оба будут отдельными ключи.

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


да! FK не нужно ссылаться на PK, вам даже не нужно ссылаться на индексированный столбец, но ради реляционной целостности (и здравомыслия) вы должны ссылаться на уникальный столбец значений (поэтому нам "нравится" ссылаться на PK или, по крайней мере, уникальный некластеризованный индексированный столбец).

Это звучит немного странно, но вы можете построить реляционную таблицу, содержащую IdA, IdB и tableA и tableB, ссылающуюся на соответствующие столбцы tableAB.

btw: таблица не должна иметь PK, но не может существовать два PK. В общем случае таблица является физической, упорядоченной ПК.


когда вы создаете ссылки на внешний ключ, ключ в ссылочной таблице должен быть первичный ключ. Не имеет смысла иметь" частичную " ссылку.

вместо этого, вы должны иметь Brands таблица с первичным ключом (возможно BrandId, возможно,BrandName -- Я предпочитаю первое). Затем таблицы, которым нужна информация о бренде, могут напрямую ссылаться на эту таблицу.