2013-12-18 5 views
0

Я хочу создать составной ключ из 2 столбца id & code, обе колонки в целом должны действовать как уникальный ключ для таблицы. в то время как я просмотрел и попытался создать таблицу следующим образом,MySql: Composite Unique Key

Create table test (
    `test_no` int not null AUTO_INCREMENT, 
    `code` varchar(5) NOT NULL, 
    `name` varchar(255), 
    `UPDBy` varchar(255), 
    PRIMARY KEY (`test_no`), 
    FOREIGN KEY (code) REFERENCES other_table(code) 
// CONSTRAINT `K_test_1` Unique KEY (`test_no`,`code`) 
) ENGINE=InnoDB DEFAULT CHARSET=utf8; 

Просто второй мысли, я могу сделать как столбец как PK? Я думаю, что это послужит моей цели, Рит?

CONSTRAINT `K_test_1` Primary KEY (`test_no`,`code`) OR Primary KEY (`test_no`,`code`) 

ответ

3

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

Существует два способа создания базы данных: либо использовать естественные значения, к которым пользователь использует, например номер сотрудника, номер отдела и т. Д. Или используйте идентификаторы (которые обычно скрыты от пользователя). Тогда у вас будет таблица сотрудников с первичным ключом «id» или «employee_id» или что-то еще, а номер сотрудника - как поле. Но поскольку он должен быть уникальным, у вас будет дополнительный уникальный индекс в этом поле.

Сказав это; у вас есть таблица «other_table» с первичным ключом «код». Таким образом, вы не используете концепцию ID здесь. Тогда почему вы используете его на тестовом столе? Если это таблица подробностей на другой_таблице, я бы ожидал, что составной ключ будет чем-то вроде кода + test_no (таким образом показывая пронумерованные тесты для кода) для isntance.

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

+0

Благодарим вас за разъяснение. да, 'Test' - это таблица подробностей на' Other_Table', и в 'Test' не было никакой' PK', но я получал ошибку при создании класса 'persistence' для таблицы' Test', потому что у нее нет 'PK', поэтому мне нужно иметь один' PK', чтобы сделать без ошибок 'persistence class', а с другой стороны он не должен влиять на обе таблицы. – user1010399

+0

BTW Я просто положил столбец 'id' как пример. я изменил его на 'test_no' – user1010399

2

Вы уверены, что можете сделать их обоими как PRIMARY KEY. Если вы этого не хотите, просто используйте UNIQUE вместо UNIQUE KEY.

Чтобы установить и как PRIMARY KEY, сделайте это следующим образом:

... 
PRIMARY KEY (`id`, `code`); 
... 

Чтобы установить UNIQUE CONSTRAINT, сделайте это следующим образом:

... 
CONSTRAINT `K_test_1` UNIQUE (`id`,`code`); 
... 
+0

Как это сделать с помощью Workbench MySQL. – vijayst

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