数据库的1对1关系如何理解?

herdsboy 2002-06-24 01:37:18
我总觉得与其用一对一关系,不如干脆放到同一表总算了。
不知该如何用,在何种场合用,谁举个例子说明一下?
thanks.
...全文
579 22 打赏 收藏 转发到动态 举报
写回复
用AI写文章
22 条回复
切换为时间正序
请发表友善的回复…
发表回复
herdsboy 2002-06-27
  • 打赏
  • 举报
回复
咦,我明明给了分了,怎么还在
herdsboy 2002-06-27
  • 打赏
  • 举报
回复
Thank you, Everybody!
guguda 2002-06-25
  • 打赏
  • 举报
回复
全是高手啊。学习了。
bluepower2008 2002-06-25
  • 打赏
  • 举报
回复
一对一关系一般是在实体关系图中确定的,比如某个系统设计规定一个员工拥有一个门卡,那么员工这个实体和门卡这个实体就是一对一关系,这是数据库的逻辑视图概念。但具体到物理视图实现时,使用两个物理表,或是用一个物理表存储,然后创建两个逻辑视图,都是可以的。
我想这个问题应该搞清楚数据库逻辑视图和物理视图的区别。
当然,把一个逻辑视图的实体,用几个物理表来存储也是有可能的,主要是权限设置和避免表的列数太多,影响查询效率。(一个数据页可能只能存储一条记录)
herdsboy 2002-06-25
  • 打赏
  • 举报
回复
请更多高手各抒己见:)
Triy 2002-06-25
  • 打赏
  • 举报
回复
还有啊,夫妻关系也是多对多的关系而不是什么别的关系。
呵呵,我一家之言,大家多想想。
Triy 2002-06-25
  • 打赏
  • 举报
回复
学校校长的例子是不确切的。
你想,我为什么要做一个校长的表呢?我要做也是做一个老师或者Person的表啊。这很通用吧?
在我理解,1对1就是应该放在同一张表中的,所谓的“同一关系”。
我见过的一个例子,是一些私人信息放到一个表中,把一些开放的信息放到另外一个表中。
broker_chengchaoji 2002-06-25
  • 打赏
  • 举报
回复
我随便举了个例子,没考虑范式
Yang_ 2002-06-24
  • 打赏
  • 举报
回复
好象有一些混淆了现实世界的1:1关系和表的1:1关系!?
表的1:1关系可能是出于一些考虑而拆出来的。

broker_chengchaoji(掮客) 的例子是能说明问题的,但是他的设计是有缺陷的,比如,象几十年,就会有各校长互换的情况,那样他的学校—校长就必须修改姓名,身份证号,婚否,其他信息等字段,改少了就会出现异常,而如果是
学校(校名,地址,学生人数,其他信息)
学校校长(姓名,身份证号,婚否,其他信息)
学校—校长(校名,姓名)
这样设计,就只改姓名一个字段,保证不会出现异常,

这也是第三范式的要求。

关于范式,不单单是用来节约存储空间的(特别是现在,存储空间往往没有问题),范式的更大意义在于消除插入异常和删除异常,保证数据的独立性。




broker_chengchaoji 2002-06-24
  • 打赏
  • 举报
回复
其实1:1是一个分析问题的一个手段而已,现实使用中放在一个表中也不见得一定错。但是也要看情况!

学校(校名,地址,学生人数,其他信息)
学校校长(姓名,身份证号,婚否,其他信息)
这两个是1:1关系。你要是把他们放在同一张表中,那像什么了?

学校—校长(校名,地址,学生人数,其他信息,姓名,身份证号,婚否,其他信息)
icevi 2002-06-24
  • 打赏
  • 举报
回复
同意Jasanye(叶子)。

还有一种情况,一般会把些大字段分到另一个表中去,比如TEXT、IMAGE之类的。
wanghai 2002-06-24
  • 打赏
  • 举报
回复
举个例子,比如又两张表,一张部门表,一张人员表,一个部门只有一个经理,一个经理也只控制一个部门,就表达了一对一的关系
herdsboy 2002-06-24
  • 打赏
  • 举报
回复
谢谢,请更多的高手谈谈
Jasanye 2002-06-24
  • 打赏
  • 举报
回复
分区就是通过将一个大表拆分成更小的单个表,我们在只访问一小部分数据的查询就可以执行得更快,因为需要扫描的数据较少。而且可以更快地执行维护任务。如现有一个表,它每月的数据量有200万条,数据需要保存3年,那么总的数据量是7200万条。其实我们在实际处理时最常用的是最近3个月的数据,其次是最近1年的数据。

那么我们在建表时每3个建立一张表,由于每3个月的表结构都是相同的,在查询时把多个表UNION在一起,由于SQL server有查询优化功能,他会在查询时通过时间来判别到哪些个表中去读取数据,而不是到所有的表中去读取数据。这样就可以加快查询速度。
herdsboy 2002-06-24
  • 打赏
  • 举报
回复
to programjava:
俺就是很难找到1对1关系的应用例子才来问的,介绍一下比较经典例子?

to jasanye:
谢谢你的答案,好像比较接近我猜测的想法
另外,我还不懂什么是分区,如何用,介绍一下?
:)
Jasanye 2002-06-24
  • 打赏
  • 举报
回复
在我们公司,一对一的表结构主要是为了解决查询时的速度问题,我们常把最常用的查询字段放到一个表中,而把不常用的查询字段放到另一个表中。在常用的查询处理中由于只查询那个简单的表,故速度较快,这在数据量在200万条到1000万条时很管用。但数据量再大时就不行了,那就只能用分区了。
programjava 2002-06-24
  • 打赏
  • 举报
回复
一对一很好理解不过你要是死钻牛角尖,那就比较难了,一对一很容易变成一对多或多对一,看数据之间的关系了~~~~~~
例子书上很多啊
herdsboy 2002-06-24
  • 打赏
  • 举报
回复
skyfeather(天羽) :

能解迷惑,多放1000分都无所谓
dgz01(打工者):

兄台谈谈你的高见?
dgz01 2002-06-24
  • 打赏
  • 举报
回复
有关范式的问题

★★★★★
打工好辛苦
★★★★★
钞票好难赚
★★★★★
编程好伤神
★★★★★
光阴好易混
★★★★★
skyfeather 2002-06-24
  • 打赏
  • 举报
回复
我不懂,可我看这边分多,所以进来了。
加载更多回复(2)

34,575

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧