2011-11-19 1 views
0

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

Создания таблицы:

Create table test 
(
testno number(5) not null, 
testpaper varchar(2) not null, 
time date 
CONSTRAINT Pa_Pks PRIMARY KEY (testno, testpaper) 
) 

Тогда это те ценности, которые я хотел бы вставить:

Testno   Testpaper   Time 
12345   22    14-JUL-2011 
12345   23    15-JUL-2011 
12345   22    16-JUL-2011 

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

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

Это должно быть стандартным и правильный способ сделать это:

Create table TEST 
(
Testid number(1) not null, 
testno number(5) not null, 
testpaper varchar(2) not null, 
time date 
CONSTRAINT Pa_Pks PRIMARY KEY (Testid) 
) 

Спасибо за любые разъяснения.

ответ

2

Нет, вы не можете этого сделать, Первичный ключ должен быть уникальным. Однако то, что вы можете сделать, это то, что вы можете добавить тестовое время как часть ключа. Или вы можете иметь другое имя столбца как Id, это будет автоматический ключ увеличения. Таким образом, ваш первичный ключ будет идентификатором (Auto Increment).

В оракуле, если вы хотите иметь ключ автоинкремента, вам также придется писать последовательность и триггер. Последовательность представляет собой просто ряд чисел. Целью триггера будет инкремент номера при вставке новой строки и сохранение его в идентификаторе столбца. , И вы также можете увеличить размер числа. Номер (1) может быть недостаточно хорош для первичного ключа. (Если вы хотите, чтобы Oracle имел идентификатор автоматического увеличения) ИЛИ Simple, вы можете добавить Time к вашему основному ключу.

Стандарт зависит от ваших требований. Оба подхода соблюдаются.

+0

Я знаю. Есть ли способ идентифицировать его как первичный ключ, но в то же время вставить одинаковые значения? Вот что я хотел бы задать: – JLearner

+0

@ user976050: ** NO ** - ваш первичный ключ ** ДОЛЖЕН быть уникальным по определению, поэтому вы ** НЕ МОЖЕТЕ ** иметь повторяющиеся значения .... –

+0

@ user976050 ответ отредактирован с возможными вариантами – Zohaib

0

Если time является допустимым к нулю, то он не может быть частью PRIMARY KEY, но он может быть частью ограничения e UNIQUE. Обратите внимание, что ключ является ключом и обозначение ключа как «первичного» является произвольным, а не обязательным.

Добавление Testid в качестве суррогатного ключа будет работать только тогда, когда у вас есть естественный ключ для начала. Поэтому:

ЯВНО естественный ключ только:

Create table TEST 
(
testno number(5) not null, 
testpaper varchar(2) not null, 
time date, 
CONSTRAINT Pa_Uqs UNIQUE (testno, testpaper, time) 
); 

ИЛИ естественный ключ плюс суррогатный ключ:

Create table TEST 
(
Testid number(1) not null, 
testno number(5) not null, 
testpaper varchar(2) not null, 
time date, 
CONSTRAINT Pa_Pks PRIMARY KEY (Testid), 
CONSTRAINT Pa_Uqs UNIQUE (testno, testpaper, time) 
);