数据库sql server 两表一对一关系

数据库sql server 两表一对一关系,第1张

SQL 关键字 inner join

假如A 表有 2个字段 a,b,类型为int

B 表有这个字段,b,c 类型int

SQL 如下:

select from A inner join B on Ab=Bb

结果就是一对一的关系

hibernate中实体关系表的配置,一对一关系:
在关系型数据库中存在两种表示一对一关系的设计方式,分别是“主键约束”和“唯一外键约束”。针对这两种不同的设计,在hibernate中有两种配置方法:
首先要明确,这两种设计的实体关系都可以表示为:你中有我,我中有你。也就是说对象关系是一样的
①主键约束
这种设计方式,是A表和B表都有一个相同的主键
比如夫妻关系表,如下:
class Hasband{
private int id;
private String name;
private Wife myWife;
getter和setter
}
以及
class Wife{
private int id;
private String name;
private Hasband myMan;
getter和setter
}
注意设计表的时候,一定要有一个主键
对应的表结构如下:
table t_hasband
t_id int
t_name varchar
以及
table t_wife
t_id int
t_name varchar
在hibernate中的配置则要注意两点,第一:两张表一定要建立级联 *** 作,第二:其中一张表的主键必须有一个class=“foreign”,关键配置如下:
实体A(丈夫):
<one-to-one name="myWife" class="WifePo" cascade="all"→级联 *** 作></one-to-one>
实体B(妻子):
<id >
<generator class="foreign"→表示这个表的主键依赖于另一张表的主键(主键约束)
<para name="property">myMan</para>
</generator>
</id>
<one-to-one name="myMan" class="Hasband"></one-to=one>
另外,我发现如果在使用MySQL时,在hibernate中设置主键自增时,设成native将会报错,最好使用increment。
②唯一外键约束(注意唯一两字)
对象关系不变
表的建立不一样了,我们用公民与身份z的例子来说明,给公民一个唯一的表示身份zid的标识,,因为是唯一标识,所以建在那张表上没有区别
表结构是:
t_citizen
t_id int primary key
t_name String
t_carId int
以及
t_card
t_id int primary key
t_name string
至于hibernate配置,这种情况可以看做多对一的一种特例;
对公民实体:
<many-to-one name="CitizenPo" class="" cascade="all"→这里是必须得,因为另一张表依赖于这张表,没有这条会报错。unique="true"→唯一的 column=""/>
对于身份z而言:
<one-to-one name="citizen" class="" property-ref="card"→表明这是通过外键加载
cascade="all" →这句不写 在存身份z表的时候公民表不会更新/>

你的问题有点大,不知从哪入手进行回答。
从大体上来讲,将A表的主键作为B表的一个外键,就可以建立A、B表的一一对应关系了。如果需要详细来讲,就需要你告知A、B表各自的字段和字段之间的关系。

1、连接到数据库,在“数据库”节点下面找到“DWDiagnostics”,点击展开,找到“数据库关系图”

2、右键点击“新建数据库关系图”

3、进入数据库关系图的设计界面

扩展资料:

1、对于任何数据库,都可以创建任意多个数据库关系图。

2、每个数据库表都可以出现在任意数量的关系图中。

3、这样,便可以创建不同的关系图是数据库的不同部分可视化,或强调设计的不同方面。

例如,可以创建一个大型关系图来显示所有表和列,并且可以创建一个较小的关系图来显示所有表但不显示列。

参考资料来源:百度百科——数据关系图

表与表之间是通过主外键链接的

可以通过‘数据库关系图’进行链接

将要连接的表选中,然后用鼠标拖动

例如

定义表Student、Course和SC之间的关系图。

要求:先要定义好三个表的主键SNO、CNO、(SNO,CNO)

(1)展开数据库“学生管理”节点,在“数据库关系图”上击右键,选择“新建数据库关系图”命令,d出新建数据库关系图向导,选择要添加到关系图中的表Student、Course和SC,这三个表将出现在新关系图窗口中。每个表显示包含的属性和定义的主键,拖动标题栏可以改变它们在窗口中的位置。

(2)将Student表的属性SNO拖动到SC表的SNO上,松开鼠标d出“创建关系”窗口,设置后单击“确定”按钮。在Student表和SC表之间会自动出现一条连线,说明创建关系成功。同样的方法可以创建Course表和SC表之间的关系。

(3)单击关闭按钮保存。

(4)试着修改或删除Student、Course和SC表中的数据,看看定义关系后有何作用。

图中都是器材号对应器材号,肯定是一对一的,因为一种器材只有一个器材号。
一对多的例子:如果"器材采购表"中的主键设为供货方,并且一种器材有不止一个供货方时,这样的对应才是一对多的关系。建议你把"器材采购表"中的主键修改成其他字段试试。

在Access数据库中,不同表中的数据之间都存在一种关系,这种关系将数据库里各张表中的每条数据记录都和数据库中唯一的主题相联系,使得对一个数据的 *** 作都成为数据库的整体 *** 作,正所谓“牵一发而动全身”。就拿上几课建立的表来说吧,“客户信息表”中的“公司名称”和“订单信息表”中的“订货单位”所包含的值有很多是相同的。因为签了订单的“订货单位”肯定已经是公司的客户了,这些客户的名称也被记载在“客户信息表”的“公司名称”字段中。当我们已知一个客户的名称时,既可以通过“客户信息表”知道它的“客户信息”,也可以通过“订单信息表”了解它所签订的“订单信息”,所以说“公司名称”作为纽带将“客户资料表”和“订单信息表”中的相应字段信息连接在了一起,为了把数据库中表之间的这种数据关系体现出来,Access提供一种建立表与表之间“关系”的方法。用这种方法建立了关系的数据只需要通过一个主题就可以调出来使用,非常方便。当我们在“客户信息表”和“订单信息表”中建立这样的关系以后,只需要看看“客户信息表”,在不增加表内容的情况下,就可以看到所有客户的信息及其所有“订单”的情况,使这些数据一目了然。表之间的三种关系在建立表之间的关系前,我们还是要提一下“关系”的三种类型“一对一”、“一对多”和“多对多”。在Access中,可以在两个表之间直接建立“一对一”和“一对多”关系,而“多对多”关系则要通过“一对多”关系来实现。我们分别来说说这三种“关系”。首先是“一对一”关系,比如下面的两个表:某学校学生月副食补助:和某学校学生月助学金:我们降这两个表中的数据进行汇总生成新的表:“某学校学生月实发金额汇总”:由于姓名字段可能会出现重复的情况,所以只有通过不可能出现重复的值的字段“学号”,才能将这两个表唯一地联系起来,保证“副食补贴”和“助学金”不至于错误地发放,这样“月副食补助表”中的一个学号就只对应“月助学金”中的一个学号,绝对不会弄错。这样两个表的关系很明显就是“一对一”了。下面来看看“一对多”关系。在“客户信息表”和“订单信息表”中,“订单信息表”中的“订货单位”字段和“客户信息表”中的“公司名称”字段中的值都是一样的。其实只有那些订货了的单位才是公司的客户,所以这两个表之间是靠客户公司的名字联系在一起的。但是每个客户都可以订很多份订单。所以在“客户信息表”中的一个“公司名称”就能对应“订单信息表”中的几份“订单”。这样的关系就是“一对多”。最后使“多对多”关系,我们知道,书店中有很多书,同时一种书也可以在很多书店里找到。这时“书”和“书店”的关系就是“多对多”关系了。怎样在表之间建立关系现在我们就开始在表之间建立“关系”,首先单击“工具”菜单下的“关系”命令,d出“关系”对话框,上面还有一个“显示表”对话框如下图,通过“显示表”对话框可以把需要建立关系的“表”或“查询”加到“关系”对话框中去。将两个表“客户信息表”和“订单信息表”都选中,单击“添加”按钮把它们都添加到“关系”对话框上,单击“关闭”按钮把“显示表”对话框关闭。以后再需要打开它时,只要在“关系”对话框上单击鼠标右键,选择“显示表”命令就可以了。在“关系”对话框中只有“客户信息表”和“订单信息表”的字段列表。怎么建立关系呢?其实表都是由字段构成的,表之间的关系也由字段来联系。让不同表中的两个字段建立联系以后,表中的其他字段自然也就可以通过这两个字段之间的关系联系在一起了。也就是说在“客户信息表”中的“公司名称”和“订单信息表”中的“订货单位”两个字段之间建立关系就可以了。先在“客户信息表”字段列表中选中“公司名称”项,然后按住鼠标左键并拖动鼠标到“订单信息表”中的“订货单位”项上,松开鼠标左键,这时在屏幕上出现“编辑关系”对话框。这个对话框可以帮助我们编辑所建立的关系,通过左面的列表框可以改变建立关系的两个字段的来源。可以单击“新建”按钮创建新的关系,或者单击“联接类型”为联接选择一种联接类型。单击“联接类型”按钮,在d出的新对话框中选择第三项,然后单击“确定”按钮就可以了。回到“编辑关系”对话框后单击“创建”按钮。现在在两个列表框间就出现了一条“折线”,将“订货公司”和“公司名称”两个选项联接在一起。关闭“关系”对话框,并保存对“关系”布局的修改。在表间建立关系就是这样的。“关系”与“子数据表”打开“客户信息表”,你会发现这个表中增加了一些新的表,它们是“客户信息表”的子表,也就是“订单信息表”。在这种“一对多”的情况下,完全可以通过“客户信息表”中的“公司名称”信息将这两个表的内容都串起来。在主表中的每一个记录下面都会带着一个甚至几个子表中的“订单”记录。具有“一对一”关系的两个表之间互为对方的“子表”。通常在建立表之间的关系以后,Access会自动在主表中插入子表。但这些子表一开始都是不显示出来的。在Access中,让子表显示出来叫做“展开”子数据表,让子表隐藏叫做将子数据表“折叠”。展开的时候方便查阅订单信息,而折叠起来以后有可以比较方便的管理“客户信息表”。要“展开”子数据表,只要用鼠标单击主表第一个字段前面一格,对应记录的子记录就“展开”了,并且格中的小方框内“加号”变成了“减号”。如果再单击一次,就可以把这一格的子记录“折叠”起来了,小方框内的“减号”也变回“加号”。如果主表很大的话,这样一个一个地“展开”和“折叠”子数据表就显得太麻烦了,Access为我们提供了一种 *** 作方式,它可以一下子“展开”或“折叠”当前数据表的所有子数据表。打开一个带有子数据表的表时,在“格式”菜单“子数据表”项的子菜单中,有三个命令“全部展开”、“全部折叠”和“删除”,“全部展开”命令可以将主表中的所有子数据表都“展开”,“全部折叠”命令可以将主表中的所有子数据表都“折叠”起来。不需要在主表中显示子数据表的这种方式来反映两个表之间的“关系”时,就可以使用“删除”命令来把这种用子数据表显示的方法删除。但这时两个表的“关系”并没有被删除。如果想恢复在主表上显示“子数据表”的形式,可以先打开主表,比如“客户信息表”,单击“插入”菜单下的“子数据表”命令,d出“插入子数据表”对话框如下图:在列表框中选取“表”----“订单信息表”,然后在“链接子字段”组合框中选取“订货单位”字段,并在“链接主字段”组合框中选取“公司名称”字段,单击“确定”按钮就可以在主数据表“客户信息表”中重新插入子数据表“订单信息表”了。必须要注意的是在任何一个数据表中插入子数据表都需要在两个表之间建立“关系”,如果这两个表的“主链接字段”和“子链接字段”之间还没有建立联结的话,在单击“确定”按钮插入“子数据表”的时候就会询问是否要在这两个表之间建立相应的“关系”,只有建立“关系”以后,才能完成“插入子数据表”过程。用这样的方式在表之间建立“关系”不像在“关系”对话框中建立的“关系”那样直观。所以我们提倡在关系对话框中建立好表与表之间的“关系”,由Access自动地创建子数据表。结束语:这一课通过“客户信息表”和“订单信息表”将表与表之间的“关系”展现在我们面前,如果你已经掌握了表的 *** 作,那就开始看下一课;如果你还没有完全掌握“表”,就将这四课再好好看一看,因为表是数据库中最重要的一个部分了。实施参照完整性 在我们建立表之间的关系时,窗口上有一个复选框“实施参照完整性”,单击它之后,“级联更新相关字段”和“级联删除相关字段”两个复选框就可以用了。如果选定“级联更新相关字段”复选框,则当更新父行(一对一、一对多关系中“左”表中的相关行)时,Access就会自动更新子行(一对一、一对多关系中的“右”表中的相关行),选定“级联删除相关字段”后,当删除父行时,子行也会跟着被删除。而且当选择“实施参照完整性”后,在原来折线的两端会出现“1”或“OO”符号,在一对一关系中“1”符号在折线靠近两个表端都会出现,而当一对多关系时“OO”符号则会出现在关系中的右表对应折线的一端上。设置了实施参照完整性就可以使我们在表中修改了一个记录的时候,不会影响到查询的 *** 作。特别是在有很多表,而且各个表之间都有关系联接时,“实施参照完整性”会带来更多的方便。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/13346101.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-07-19
下一篇 2023-07-19

发表评论

登录后才能评论

评论列表(0条)

保存