我有以下表格类别,餐厅和菜单。
餐厅可以有多个菜单,餐厅也可以有多个菜单。每个菜单显然都有一些类别,每个菜单都可以作为许多菜单的一部分。
我可以创建一个看起来像这样的表,并且有3个主键吗?
类别ID |餐厅ID |菜单ID
1(开胃菜)| 1智利' 2晚餐菜单
2(主菜)| 1智利' 2晚餐菜单
3(甜点)| 1Chile的# 2晚餐菜单
1 | 67麦当劳| 3午餐菜单
1
答案 0 :(得分:3)
是的,您可以创建元组(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;