一对多和多对多在实际的需求分析中都是可以让人理解的,但是只有这个一对一关系让我无法理解。
1.首先就是这种关系出现的场景是什么样子,最好可以举个实际中的需求。
2.为什么要使用两个表来维护一对一关系,为什么不直接将两个表中的字段全都放在一张表里来展示?
3.提出这种关系的目的是什么,就是为提高我们数据库查询条件吗?
谢谢各位高手帮忙解决这个基础小问题。
1. 公司和公司地址,总经理和公司,部门经理和部门 都是一对一
2. 对于小字段小数据量的数据库来说,放到一起无所谓了,但是对于大字段的数据库,要添加删除修改某一个字段,由于数据库大,字段多,数据库找到这个字段耗时久,造成锁表等问题。同时分离存储大数据的表时,查询也会节省时间,因为某些框架会映射表里面所有的字段,存在一起查询时会把不需要的字段也映射进来造成耗时过久。还有,大数据量的表分离存储对于索引创建,读写分离,分割等操作都有优势。
3. 同2
1.首先就是这种关系出现的场景是什么样子,最好可以举个实际中的需求。
这样的场景有很多,比如:就拿最普通的用户信息来说,数据库中有一个表为user,一个表为user_auth.user表主要存放的字段为用户基本的信息(用户ID、真实姓名、昵称、真实头像、性别、职位、教育程度、专业、创建该用户的时间等),而在user_auth为验证表(用户ID、用户密码、邮箱、手机号等)。当涉及到一个具体实体的信息量较多,或者可以分类的时候,就可以使用了1-1,当然只要你能把一个实体的关系拆分成几个有归类的部分也可以适用。
2.为什么要使用两个表来维护一对一关系,为什么不直接将两个表中的字段全都放在一张表里来展示?
如果都放在一张表里,一:不便于管理(包括查询执行速度),二:也就达不到关系型数据库的特性。三:可更好对业务进行事务隔离操作
3.提出这种关系的目的是什么,就是为提高我们数据库查询条件吗?
目的:为第二问答案。这与数据库查询条件没有必然的说法。你说查询速度或者为了方便区分查询管理还说得过去。
举个最简单的例子
淘宝的商品表,“商品的描述”字段最占用资源,并且用户在搜索商品时,不会使用到“商品的描述”字段,这个时候就要将“商品的描述”字段分离开来,不然会拖慢整个表,且淘宝将“商品的描述”使用了TFS进行存储。
这里的“商品的描述”和商品就是一对一关系。
部分参见“淘宝技术这十年”一书。
以上。
比如现在的订火车票系统,一个身份证号只能买一张火车票,就是一对一的关系
这个,在数据库的存储设计中,不算是一对一哦~
我记得我的老师曾跟我说个这样的一个例子。
这一对一就相当于 一夫一妻制,而这一对多则相当于一个男人对应多个情妇。
一张表存放的是夫妻的信息,一个表存放的事情妇与男人的信息。
如果放到了一起,且不考虑效率问题,就这信息不都曝光了,容易被窃取乱了套,这里就信息安性问题了,如果两张表中的信息
放在了一起,或者通过sql注入窃取信息或者别的方法直接来个select * from this.table岂不是把所有信息都调出来啦啊。
同样一对一也是为了获取信息的方便,比如这个人的iD,然后有这个人的生活、学习、工作等各个方面的信息分别放在不同的表
中。获取所需信息时到对应的表中获取,调高效率也比较符合情理。
简单场景:用户信息表(常用的属性+附加属性分两个表存储,然后同过UserId关联,这样就是一对一了。)