三个主键与三个不同的表相关

时间:2012-03-19 22:32:54

标签: mysql database database-design primary-key

我有以下表格类别,餐厅和菜单。

餐厅可以有多个菜单,餐厅也可以有多个菜单。每个菜单显然都有一些类别,每个菜单都可以作为许多菜单的一部分。

我可以创建一个看起来像这样的表,并且有3个主键吗?

类别ID |餐厅ID |菜单ID

1(开胃菜)| 1智利' 2晚餐菜单
2(主菜)| 1智利' 2晚餐菜单
3(甜点)| 1Chile的# 2晚餐菜单
1 | 67麦当劳| 3午餐菜单 1

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;