Эти определения FK эквивалентны? - PullRequest
1 голос
/ 25 мая 2019

Следующие два определения внешнего ключа address эквивалентны?Я имею в виду, имеют ли они одинаковые эффективные элементы базы данных (индекс, ограничения и т. д.).Я предпочитаю последнее, потому что это сокращенное и меньше набирать.

Здесь индекс адреса и ограничение создаются явно:

CREATE TABLE customer (
  customer_id SMALLINT UNSIGNED NOT NULL AUTO_INCREMENT,
  first_name VARCHAR(45) NOT NULL,
  last_name VARCHAR(45) NOT NULL,
  PRIMARY KEY  (customer_id),
  KEY idx_fk_address_id (address_id),
  CONSTRAINT fk_customer_address FOREIGN KEY (address_id) REFERENCES address (address_id) ON DELETE RESTRICT ON UPDATE CASCADE
)ENGINE=InnoDB DEFAULT CHARSET=utf8;

Здесь также создаются ограничение и индекс?

CREATE TABLE customer (
  customer_id SMALLINT UNSIGNED NOT NULL AUTO_INCREMENT,
  first_name VARCHAR(45) NOT NULL,
  last_name VARCHAR(45) NOT NULL,
  PRIMARY KEY  (customer_id),
  FOREIGN KEY (address_id) REFERENCES address (address_id) ON DELETE RESTRICT ON UPDATE CASCADE
)ENGINE=InnoDB DEFAULT CHARSET=utf8;

Есть ли другие отличия, о которых следует знать?

1 Ответ

3 голосов
/ 25 мая 2019

С функциональной точки зрения эти объявления эквивалентны.Разница в том, что в первом фрагменте задано понятное имя, которое будет проще поддерживать позже, а во втором будет создано автоматически сгенерированное имя.

...