Какой способ определить внешние ключи в MySQL - PullRequest
1 голос
/ 22 декабря 2010

Я вижу два способа сделать это:

Метод 1:

CREATE TABLE IF NOT EXISTS `sample` (  
  `sample_id` tinyint(2) NOT NULL AUTO_INCREMENT,  
  `description` varchar(32) NOT NULL,  
  `parent_id` int(10) NOT NULL,  
  `created` datetime NOT NULL,  
  PRIMARY KEY (`sample_id`)  
) ENGINE=InnoDB;  

ALTER TABLE sample ADD CONSTRAINT parent_id FOREIGN KEY (parent_id) REFERENCES parent_tbl(parent_id);  

Метод 2:

CREATE TABLE IF NOT EXISTS `sample` (  
  `sample_id` tinyint(2) NOT NULL AUTO_INCREMENT,  
  `description` varchar(32) NOT NULL,  
  `parent_id` int(10) NOT NULL,  
  `created` datetime NOT NULL,  
  PRIMARY KEY (`sample_id`),  
  Foreign Key (parent_id) references parent_tbl(parent_id)  
) ENGINE=InnoDB;  

Какой способ лучше или когда использовать один над другим?

Ответы [ 3 ]

2 голосов
/ 22 декабря 2010

Если вам нужно добавить внешний ключ в существующую таблицу, используйте метод 1 , если вы создаете схему с нуля, используйте метод 2 .

лучший способ не существует, они делают то же самое.

0 голосов
/ 22 декабря 2010

Конечные продукты неразличимы.

Для ясности (приятно видеть, что ограничение явно само по себе), я бы выступил за первое.

Для краткости (говоря то же самое в 1 утверждении против 2), я мог бы выступить за второе.

0 голосов
/ 22 декабря 2010

Первый дает вам больше гибкости.

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

2) Это не таквсегда вы точно знаете, какие индексы вам понадобятся при создании таблицы.Когда вы создаете индексы, обычно хорошей идеей является измерить выигрыш в производительности некоторых реальных данных и, возможно, попробовать несколько разных индексов, чтобы увидеть, какие из них работают лучше.Чтобы эта стратегия работала, вам нужно сначала создать таблицу, вставить некоторые данные, а затем вам нужно будет изменить индексы для тестирования.Отбрасывание и воссоздание таблицы не так практично, как ALTER TABLE в этой ситуации.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...