一.Mysql(关系形数据库)
1.建表
(1).物理外键与逻辑外键
我们在定义两张表(user/userInfon)的关系时,学校教我们的是用foreign key 去创建,这种是物理外键。
而逻辑外键就是两者必然的关联但是没有foreign key 来关联,而是在设计两张表的时候创建字段去存储相关联的数据内容。
如,user(用户表)中存在user_id(用户id)字段,userInfon(用户信息表)中也存在user_id(用户id)字段,
这样就可以通过
'select * from user inner join userInfon on user.user_id = userInfon.user_id,
这样的sql语句来实现逻辑查询
物理外键的缺陷
为何说所有物理外键删除,因为外键有性能问题:
1.数据库需要维护外键的内部管理;
2.外键等于把数据的一致性事务实现,全部交给数据库服务器完成;
3.有了外键,当做一些涉及外键字段的增,删,更新操作之后,需要触发相关操作去检查,而不得不消耗资源;
4.外键还会因为需要请求对其他表内部加锁而容易出现死锁情况
二.redis(键值存储型数据库)
1.如何保证数据一致
用户端小程序展示的菜品数据都是通过查询数据库获得,如果用户端访问量比较大,数据库访问压力随之增大。
当第一次查询某个分类的菜品时,会从数据为中进行查询,同时将查询的结果存储到Redis中,在后绪的访问,若查询相同分类的菜品时,直接从Redis缓存中查询,不再查询数据库。
当在后台修改菜品数据时,为了保证Redis缓存中的数据和数据库中的数据时刻保持一致,当修改后,需要清空对应的缓存数据。用户再次访问时,还是先从数据库中查询,同时再把查询的结果存储到Redis中,这样,就能保证缓存和数据库的数据保持一致。