| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 860 人关注过本帖
标题:搞不懂一对一和一对多的关系
只看楼主 加入收藏
sw3929
Rank: 2
等 级:论坛游民
帖 子:25
专家分:19
注 册:2019-3-29
结帖率:80%
收藏
已结贴  问题点数:20 回复次数:15 
搞不懂一对一和一对多的关系
有个问题迷惑:
比如有一个父表和一个子表,在数据工作期里把父表的主键和子表的外键用“关系”按钮连接,然后还可以继续用“一对多”按钮继续关联,这时候打开主表,会出现大量的 * 内容的行。我想问的是这两种方式有何区别?只用“关系”不就连接好了吗?为什么还要有“一对多”,还这么多 * 有什么用?谢谢
搜索更多相关主题的帖子: 连接 继续 按钮 关系 一对多 
2023-09-25 20:54
laowan001
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:66
帖 子:1094
专家分:2693
注 册:2015-12-30
收藏
得分:3 
“一对多”按钮:是个什么按钮?
大量*内容的行,截个图来看看吧
2023-09-25 21:35
hu9jj
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:红土地
等 级:贵宾
威 望:400
帖 子:11857
专家分:43421
注 册:2006-5-13
收藏
得分:3 
父表的关键字段对应另一个表的关键字段就是一对一的关系,若是对应多个表的关键字段就是一对多的关系。

活到老,学到老!http://www.(该域名已经被ISP盗卖了)E-mail:hu-jj@
2023-09-26 08:27
easyppt
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:1
帖 子:309
专家分:711
注 册:2021-11-24
收藏
得分:3 
只有一句 set relation 建立关系不行,还缺少关键性的一条命令,一时想不起来了。
2023-09-26 08:31
hu9jj
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:红土地
等 级:贵宾
威 望:400
帖 子:11857
专家分:43421
注 册:2006-5-13
收藏
得分:0 
好象是还需要一条移动记录的命令,例如skip命令。

活到老,学到老!http://www.(该域名已经被ISP盗卖了)E-mail:hu-jj@
2023-09-26 08:33
gs2536785678
Rank: 10Rank: 10Rank: 10
等 级:贵宾
威 望:45
帖 子:610
专家分:1784
注 册:2017-7-16
收藏
得分:3 
先要从表建立关键字段的索引   
然后选择主表在主表上发起   
 SELECT  主表   
 SET RELATION TO 关键字 INTO 从表  
  
现在的VFP9严格了:如果关键字段是字符型,  
还必需主表与从表的关键字段长度相等。

[此贴子已经被作者于2023-9-26 09:46编辑过]

2023-09-26 09:42
laowan001
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:66
帖 子:1094
专家分:2693
注 册:2015-12-30
收藏
得分:0 
以下是引用hu9jj在2023-9-26 08:27:16的发言:

父表的关键字段对应另一个表的关键字段就是一对一的关系,若是对应多个表的关键字段就是一对多的关系。


父表关键字段对应另一个表关键字段相同的多条记录算一对一还是一对多?
2023-09-26 13:56
sdta
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:江苏省连云港市
等 级:版主
威 望:335
帖 子:9848
专家分:27241
注 册:2012-2-5
收藏
得分:3 
set skip 命令

示例 请参阅



创建表与表之间的一对多关系。



语法



SET SKIP TO [TableAlias1 [, TableAlias2] ...]



参数

TO TableAlias1 [, TableAlias2] ...



指定多个子表的别名。这些子表用来与父表创建一对多关系。表别名之间用逗号分隔。在支持范围的命令( DISPLAY、LIST

等)中,对于子表中每一个对应记录都重复父表的记录。

不带参数的 SET SKIP TO 命令从当前选定工作区的已打开父表中删除该一对多关系,而任何一对一关系仍然有效。一对一关系可以用 SET RELATION TO 删除。



说明



使用 SET RELATION 可以在不同工作区中打开的表之间建立关系。当记录指针在父表中移动时,子表中的记录指针也移动到第一个对应的记录上。SET RELATION 中的关系表达式决定子表中的记录指针移到何处。如果对于父表中每一个记录都建立了一对一的关系,记录指针将移到子表中第一个相匹配的记录上。如果在子表中找不到相匹配的记录,则记录指针移到表尾。

很多情况下,父表中的一个记录通常在子表中有多个记录与之对应。SET SKIP 允许在父表的一个记录与子表的多个记录之间建立一对多关系。当浏览父表时,父表的记录指针将一直保持不动,直到记录指针移过子表中所有相关的记录为止。



要建立一对多关系,首先使用 SET RELATION 在父表与子表之间建立关系。然后发出 set skip 命令创建一对多关系。


[此贴子已经被作者于2023-9-27 12:55编辑过]


坚守VFP最后的阵地
2023-09-26 15:46
gs2536785678
Rank: 10Rank: 10Rank: 10
等 级:贵宾
威 望:45
帖 子:610
专家分:1784
注 册:2017-7-16
收藏
得分:0 
这位朋友你好,你可能对VFP的DBF表不太了解,有二种表:属于数据库的表与自由表
对于数据库中的表,可以建立主索引【数据值不能重复】或者建立普通索引【数据值
可以重复】
对于自由表不能建立主索引,一般建立普通索引或者唯一索引

上面朋友讲的一对一,一对多,都是在数据库表中的术语
两个数据库表的索引字段都是【主索引】,它们之间建立的
就是一对一的联系,建立的方法只要直接用鼠标拖动。
两数据库表的索引字段一个是【主索引】另一个是【普通索引】
就是一对多的联系,建立的方法只要直接用鼠标拖动。

一般的程序员,他们不使用数据库表,而是使用自由表,因此也不研究
一对一,一对多的问题,只是在自由表里建立普通索引就成了
而两个自由表的联系【不是用鼠标拖动】,而是使用SET语句
先要从表建立关键字段的索引   

然后选择主表在主表上发起   

 SELECT  主表   

 SET RELATION TO 关键字 INTO 从表
2023-09-26 15:49
sw3929
Rank: 2
等 级:论坛游民
帖 子:25
专家分:19
注 册:2019-3-29
收藏
得分:0 
是我没说清楚,如下图:
两个表,总表是父表,数据是子表。设关联是主表的id字段和子表的链接号字段。
问题是:在图中右侧的数据工作期里,还没设关联时,只有关系(R)键可以使用,一对多(T)是不可用的。然后点关系(R)键,设主表的id字段和子表的链接号相联,打开两表后如图左,在主表中定位一条记录,则子表同时显示所有的链接号与id相同的记录,这已经是一对多了。
图片附件: 游客没有浏览图片的权限,请 登录注册

设好关联后,此时一对多(T)键可用,点之继续设,再打开两表,如下图所示:
图片附件: 游客没有浏览图片的权限,请 登录注册

主表出现大量*记录,其数量等于子表对应的记录数。右边的数据工作期里的关系图也有了两根连线。
不明白的是这有什么意义,如果说这才是一对多,那么前面的关系(R)就不是一对多了,可分明那也是一对多啊,定位主表一条记录,则子表显示很多记录,不就是一对多吗?
我这所以要搞明白这个问题,是因为我要讲解,但自己还不明白,就没法讲了。
2023-09-26 20:23
快速回复:搞不懂一对一和一对多的关系
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.023478 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved