Какъв е оптималният начин за проектиране на тази проста таблица с 3 уникални колони в този случай?

Да речем, имам таблица с 3 колони (тип varchar), уникален ключ = комбинацията от 3 колони. Трябва ли да създам още 1 колона (тип int) и да задам първичния ключ за нея, разбира се, все още задаваме уникалния (колона1, колона2, колона3)?

Кое е по-добро? 3 уникални колони или 4 колони (1 първичен ключ + 3 уникални колони) и защо смятате, че тази опция е по-добра?


person Tom    schedule 19.04.2013    source източник


Отговори (3)


Едно предимство на допълнителната псевдоключова колона е, че е по-лесно да създавате FK към вашата таблица, тъй като имате само една колона за справка

person TGH    schedule 19.04.2013

Има три разумни начина за изграждане на тази маса. Основният релационен принцип е, че всички известни ограничения трябва да бъдат декларирани на dbms, така че dbms да може да ги наложи. Във всички случаи трите колони, които съдържат реални данни, вероятно трябва да бъдат декларирани като NOT NULL.

create table wibble (
  column_1 data-type not null,
  column_2 data-type not null,
  column_3 data-type not null,
  primary key (column_1, column_2, column_3)
);

create table wibble (
  surrogate_id_number integer primary key,
  column_1 data-type not null,
  column_2 data-type not null,
  column_3 data-type not null,
  unique (column_1, column_2, column_3)
);

create table wibble (
  surrogate_id_number integer not null unique,
  column_1 data-type not null,
  column_2 data-type not null,
  column_3 data-type not null,
  primary key (column_1, column_2, column_3)
);

Трябва да е очевидно, че ограничението на първичен ключ само в колона с идентификационен номер не може да работи. Това би позволило дублирани данни като тези.

1  Value1  Value2  Value3
2  Value1  Value2  Value3
3  Value1  Value2  Value3
4  Value1  Value2  Value3
5  Value1  Value2  Value3
person Mike Sherrill 'Cat Recall'    schedule 19.04.2013

Според мен трябва да направите всички колони като първичен ключ, тъй като никога не позволява нулева стойност и индексът на първичния ключ е най-ефективният път за достъп за tabl. Вместо това зависи от вашите изисквания дали int type id се изисква или не.

person Ajeet Singh    schedule 19.04.2013