Как создать таблицу с двумя первичными ключами из двух внешних ключей? - PullRequest
2 голосов
/ 02 февраля 2012
create table Machine
(
 Machine_ID int primary key,
 Machine_Name varchar(30)
 Machine_Title varchar(30)
)
create table Part
(
 Part_ID int primary key,
 Part_Name varchar(30),
 Part_Description varchar(30)
)

//How do I make this table below?
create table Machine-Part
(
  Machine_ID int foreign key references (Machine.Machine_ID),
  Part_ID int foreign key references (Part.Part_ID)
  Factory_Note varchar(30);
) 

Mysql жалуется, что есть проблема с синтаксисом?

Желаемый результат: для таблицы 'Machine-Part' используйте 'Machine_ID' и 'Part_ID' в качестве обоих первичных ключей (оба являются внешними ключами).

Ответы [ 2 ]

7 голосов
/ 02 февраля 2012

Если вы объявляете ограничение отдельно (на уровне таблицы), это имеет больше смысла

create table Machine-Part
(
  Machine_ID int NOT NULL ,
  Part_ID int NOT NULL ,
  Factory_Note varchar(30) NULL,

  PRIMARY KEY (Machine_ID, Part_ID),
  UNIQUE INDEX (Part_ID, Machine_ID),
  foreign key (Machine_ID) references (Machine.Machine_ID),
  foreign key (Part_ID) references (Part.Part_ID)
) 

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

2 голосов
/ 02 февраля 2012

Как то так -

CREATE TABLE Machine(
  Machine_ID INT PRIMARY KEY,
  Machine_Name VARCHAR(30),
  Machine_Title VARCHAR(30)
)
ENGINE = INNODB;

CREATE TABLE Part(
  Part_ID INT PRIMARY KEY,
  Part_Name VARCHAR(30),
  Part_Description VARCHAR(30)
)
ENGINE = INNODB;

create table `Machine-Part`(
  Machine_ID int,
  Part_ID int,
  Factory_Note varchar(30),
  CONSTRAINT fk_Machine_ID FOREIGN KEY (Machine_ID) REFERENCES Machine(Machine_ID),
  CONSTRAINT fk_Part_ID FOREIGN KEY (Part_ID) REFERENCES Part(Part_ID)
)
ENGINE = INNODB;

Вы можете найти всю информацию на этих страницах:

...