Каким способом связать две таблицы? Через составной первичный ключ или через доп. поле id?

В MySQL существует несколько способов связать две таблицы. Два наиболее распространенных способа - через составной первичный ключ и через дополнительное поле id.

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

Например, у нас есть таблица "users" с полями "id", "name" и таблица "orders" с полями "user_id", "order_time". Чтобы связать эти две таблицы, мы можем создать составной первичный ключ (user_id, order_time) в таблице "orders", и это поле user_id будет ссылаться на поле id в таблице "users".

CREATE TABLE users (
  id INT PRIMARY KEY,
  name VARCHAR(50)
);

CREATE TABLE orders (
  user_id INT,
  order_time DATETIME,
  PRIMARY KEY (user_id, order_time),
  FOREIGN KEY (user_id) REFERENCES users(id)
);

2. Связь через дополнительное поле id:
В этом случае, мы создаем дополнительное поле id в таблице, которое будет ссылаться на запись в другой таблице. Чаще всего такая связь используется при связи "один ко многим", когда у нас есть таблица, содержащая основные данные, и таблица с подробностями о каждой записи в основной таблице.

Например, у нас есть таблица "products" с полями "id", "name", и таблица "reviews" с полями "id", "product_id", "comment". Чтобы связать эти две таблицы, мы создаем поле "product_id" в таблице "reviews", которое будет ссылаться на поле "id" в таблице "products".

CREATE TABLE products (
  id INT PRIMARY KEY,
  name VARCHAR(50)
);

CREATE TABLE reviews (
  id INT PRIMARY KEY,
  product_id INT,
  comment TEXT,
  FOREIGN KEY (product_id) REFERENCES products(id)
);

Какой способ выбрать - зависит от специфики данных и требований к базе данных. Оба способа имеют свои преимущества и недостатки, и выбор зависит от конкретной ситуации.