Как лучше всего создать эту простую таблицу с 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

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

person Ajeet Singh    schedule 19.04.2013