使CMS管理餐馆。简而言之,有餐厅有自己的部门。此外,还有需要分配给餐厅的餐点(所有分部可以看到这些餐点)或个别分部(所以只有选定的分部才能看到餐点)。PHP/MySQL - 使用3(通常不是2)映射表来继承权限
所以我创建的表:
restaurant_id | restaurant_name
1 | Restaurant 1
2 | Restaurant 2
division_id | restaurant_id | division_name
1 | 1 | 1-1
2 | 1 | 1-2
3 | 2 | 2-1
4 | 2 | 2-2
meal_id | meal_name
1 | Steak
包含3列也造就映射表meals_to_restaurants_divisions
- meal_id, restaurant_id, division_id
所以,如果我要指派餐餐厅1和它的所有部门,我会创造记录:
meal_id | restaurant_id | division_id
1 | 1 | null
如果我要指派餐只分裂2-2,我会创造一个纪录:
meal_id | restaurant_id | division_id
1 | null | 4
有人会建议这样的方案是否正确?如何改进?我知道有人会说,我应该只创建映射表,有2条记录 - meal_id
和division_id
,并将餐分配给所有分部,而不是分配给餐馆,但这里有一个问题:如果餐厅1未来创建新分区,我希望新分区继承相同的权限(所以如果现有的餐点分配给餐厅而不是分部,所有未来的分部将继承餐厅的权限)。否则,我需要手动编辑每餐,并指定一个新的分区。
如果有人有兴趣,为什么我在restaurant_id
在第二个例子中使用null
,这是因为如果划分的父母在后面改变(师被分配到另一家餐厅),我并不需要扫描的映射表,并更改restaurant_id
价值存在。