2013-04-22 2 views
0

Я пытаюсь назначить первичный ключ, но некоторые данные дублируются? Как мы можем хранить данные, но все еще иметь первичный ключ?Первичные ключи с дублированными данными?

+0

Исправить данные. Какой смысл хранить одну и ту же информацию более одного раза? – sqlvogel

+0

По определению данные в столбце первичного ключа должны быть уникальными –

ответ

1

Первичный ключ - это серия уникальные значения. Таким образом, вы можете хранить свои дублированные данные или иметь первичный ключ, но не тот и другой.

В качестве альтернативы вы можете использовать суррогатный ключ, добавив столбец идентификатора в таблицу и заполнив его из последовательности. Конечно, в этой ситуации «primaruy key» бессмысленен, потому что вы не применяете уникальность бизнес-ключа. Но по крайней мере вы можете обмануть себя, что у вас есть реальная целостность.

1

Из того, что я могу догадаться, у вас есть данные, и вы пытаетесь назначить столбец в качестве первичного ключа, однако данные имеют повторяющиеся значения для этого столбца.

Первичные ключи должны быть уникальными. Это базы данных 101. Если единственное, что работает в качестве первичного ключа, это дубликат, вы не правильно структурируете свои таблицы.

1

Вы можете вручную создать не уникальный индекс по столбцам быть ограничены, а затем добавить ограничение первичного ключа с пунктом novalidate, например:

create table t1 (x number); 

insert into t1 (x) values (1); 
insert into t1 (x) values (1); 
commit; 

create index t1_pk on t1 (x); 

alter table t1 add (
    constraint t1_pk primary key (x) novalidate 
); 

я должен подчеркнуть, однако, что, хотя возможно, это обычно плохой дизайн!

2

Единственный раз, когда я столкнулся с этим за 17 лет работы с базой данных, был вызван ошибкой в ​​данных. Один клиент был введен дважды, с тем же идентификатором, в таблицу, у которой не было первичного ключа.

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

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

0

Первичные ключи уникальны, поэтому, если вы хотите иметь дубликаты данных в определенном столбце, этот же столбец не может быть основным кеем этой таблицы.

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