Да, вы можете сделать первичный ключ кортежа (category_id, restaurant_id, menu_type_id)
.Более того, создайте нормальный интегральный первичный ключ и добавьте еще один индекс к этому кортежу с ограничением уникальности.Всегда хорошо иметь быстрый простой первичный ключ, но вы, безусловно, можете применить уникальность тройки:
CREATE UNIQUE INDEX menu_index
ON menus (category_id, restaurant_id, menu_type_id)
Или вы можете определить индекс прямо при создании таблицы:
CREATE TABLE menus (menu_id INT AUTO_INCREMENT PRIMARY KEY,
category_id INT,
restaurant_id INT,
menu_type_id INT,
FOREIGN KEY (category_id) REFERENCES categories(category_id),
FOREIGN KEY (restaurant_id) REFERENCES restaurants(restaurant_id),
FOREIGN KEY (menu_type_id) REFERENCES menu_types(menu_type_id),
UNIQUE INDEX (category_id, restaurant_id, menu_type_id)
) ENGINE=InnoDB;