Как создать составной ключ? - PullRequest
4 голосов
/ 28 февраля 2012

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

Но как создать составной ключ?Например у меня есть эта таблица sql

CREATE TABLE TASKS
(
 TEST_ID NUMBER(6) CONSTRAINT FK_TASKS_TESTS REFERENCES TESTS(TEST_ID),
 TASK_ID NUMBER(3),
 MAX_POINTS NUMBER,
 CONSTRAINT PK_TASKS PRIMARY KEY (TEST_ID, TASK_ID)
);

Есть ли опция для этого или она должна быть создана иначе?

Ответы [ 3 ]

4 голосов
/ 28 февраля 2012

Вопрос сводится к уникальности.Если вы знаете, что TASK_ID будет уникальным, лучше использовать один столбец в качестве первичного ключа.MySQL допускает первичный ключ из нескольких столбцов, но если TASK_ID будет уникальным, просто сделайте этот первичный ключ и добавьте еще один индекс для TEST_ID.Синтаксис первичного ключа:

CREATE TABLE TASKS
(
TEST_ID NUMBER(6),
TASK_ID NUMBER(3),
MAX_POINTS NUMBER,
PRIMARY_KEY(TASK_ID) -- OR PRIMARY_KEY(TASK_ID, TEST_ID) for the composite key
);

См. это обсуждение для получения дополнительной информации.

3 голосов
/ 28 февраля 2012

Прежде всего, ограничение внешнего ключа, я не думаю, что оно должно быть там.Насколько я могу судить, все ограничения объявляются после объявления переменной (это одна из норм sql в целом) для составного ключа, который у вас почти получился, вы просто ошибаетесь, и это пишет Contraint.вот пример работы

CREATE TABLE IF NOT EXISTS TASK (
  TEST_ID NUMBER(6) ,
  TASK_ID NUMBER(3) ,
  MAX_POINTS NUMBER ,
  PRIMARY KEY (TEST_ID,TASK_ID),

  CONSTRAINT fk_1 FOREIGN KEY (`TEST_ID`) REFERENCES TEST (TEST_ID)
)
0 голосов
/ 23 августа 2017

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

изменить таблицу сотрудника добавить первичный ключ (emp_id, emp_name);

...