文章分类 | 推荐文章 | 最新文章 | 热点文章 | 最新软件 | 国产软件 | 国外软件 | 汉化补丁 | 设为首页 | 加入收藏
网站首页 软件下载
数码学院 网络学院
业界资讯 | 图形图像 | 操作系统 | 网络冲浪 | 工具软件 | 办公软件 | 媒体动画 | 精文荟萃 | 认证考试 | 网站建设 | 技术开发 | 专栏
当前位置:abcdown网络学院网络编程数据库如何定义数据库表之间的关系
精品广告
推荐TOP10
·SQL数据库完全使用手册
·进阶:精妙SQL语句介绍
·sql删除记录
·学习SQL语句之SQL语句大全
·数据备份失败的五个原因及解决办法
·解决SQL Server常见的七个经典问题
·SQL存储过程的概念,创建,调用,管理,删除,优点
·带你轻松接触13个数据库术语
·如何恢复系统数据库如何恢复系统数据库?
·通过实例讲解由浅入深学会存储过程
·学会三个范式快速成为数据库设计的高手
·SQL数据库应聘人员面试时经常被问的问题
·问答:查询分析器不能单步调试的的原因
·数据库基础知识:SQL中的IIF语句详解
·WindowsXP+IIS+PHP5+MySQL5+Zend+GD库+phpMyAdmin+PHPWind 5.3 安装教程
·你知道吗?优化数据库前的十大问题
·自动备份注意事项让你远离误删数据噩梦
·关于MSSQL数据库日志满的快速解决办法
·SQL安全设置攻略
·SQL注入的不常见方法
阅读TOP10
·collate chinese_prc_ci_as null 是什么意思
·SQL中CASE的用法
·SQL数据库完全使用手册
·学习SQL语句之SQL语句大全
·15 个与日期时间相关的自定义函数
·用SQL实现分页的三种方法
·用独立的DLL来存储图片(资源文件)
·如何恢复系统数据库如何恢复系统数据库?
·判断与主表关联的外键表是否有数据引用再删除
·如何实现将vsflexgrid中修改的数据反馈到数据库中
·怎么用sql修改表名
·数据安全防护之打造安全.mdb数据库
·ADO连接数据库字符串大全
·详细介绍Oracle数据库的启动和关闭
·带你轻松接触13个数据库术语
·SQL数据库高级教程:学习 SQL Alias(别名)
·教你如何读取Excel数据并导入DB2数据库
·了解SQL语句的功能,快速学会SQL语句
·帮你精细分析各种类型数据库的死锁问题
·利用OBJECT_DEFINITION函数来代码存档

如何定义数据库表之间的关系

日期:2007年7月8日 作者: 查看:[大字体 中字体 小字体]


特别说明
数据库的正规化是关系型数据库理论的基础。随着数据库的正规化工作的完成,数据库中的各个数据表中的数据关系也就建立起来了。

在设计关系型数据库时,最主要的一部分工作是将数据元素如何分配到各个关系数据表中。一旦完成了对这些数据元素的分类,对于数据的操作将依赖于这些数据表之间的关系,通过这些数据表之间的关系,就可以将这些数据通过某种有意义的方式联系在一起。例如,如果你不知道哪个用户下了订单,那么单独的订单信息是没有任何用处的。但是,你没有必要在同一个数据表中同时存储顾客和订单信息。你可以在两个关系数据表中分别存储顾客信息和订单信息,然后使用两个数据表之间的关系,可以同时查看数据表中每个订单以及其相关的客户信息。如果正规化的数据表是关系型数据库的基础的话,那么这些数据表之间的关系则是建立这些基础的基石。

出发点
下面的数据将要用在本文的例子中,用他们来说明如何定义数据库表之间的关系。通过Boyce-Codd Normal Form(BCNF)对数据进行正规化后,产生了七个关系表:

Books: {Title*, ISBN, Price}
Authors: {FirstName*, LastName*}
ZIPCodes: {ZIPCode*}
Categories: {Category*, Description}
Publishers: {Publisher*}
States: {State*}
Cities: {City*}

现在所需要做的工作就是说明如何在这些表之间建立关系。

关系类型
在家中,你与其他的成员一起存在着许多关系。例如,你和你的母亲是有关系的,你只有一位母亲,但是你母亲可能会有好几个孩子。你和你的兄弟姐妹是有关系的——你可能有很多兄弟和姐妹,同样,他们也有很多兄弟和姐妹。如果你已经结婚了,你和你的配偶都有一个配偶——这是相互的——但是一次只能有一个。在数据表这一级,数据库关系和上面所描述现象中的联系非常相似。有三种不同类型的关系:


一对一:在这种关系中,关系表的每一边都只能存在一个记录。每个数据表中的关键字在对应的关系表中只能存在一个记录或者没有对应的记录。这种关系和一对配偶之间的关系非常相似——要么你已经结婚,你和你的配偶只能有一个配偶,要么你没有结婚没有配偶。大多数的一对一的关系都是某种商业规则约束的结果,而不是按照数据的自然属性来得到的。如果没有这些规则的约束,你通常可以把两个数据表合并进一个数据表,而且不会打破任何规范化的规则。


一对多:主键数据表中只能含有一个记录,而在其关系表中这条记录可以与一个或者多个记录相关,也可以没有记录与之相关。这种关系类似于你和你的父母之间的关系。你只有一位母亲,但是你母亲可以有几个孩子。


多对多:两个数据表里的每条记录都可以和另一个数据表里任意数量的记录(或者没有记录)相关。例如,如果你有多个兄弟姐妹,这对你的兄弟姐妹也是一样(有多个兄弟姐妹),多对多这种关系需要引入第三个数据表,这种数据表称为联系表或者连接表,因为关系型系统不能直接实现这种关系。

建立关系
在开始着手考虑建立关系表之间的关系之前,你可能需要对数据非常熟悉。只有在熟悉数据之后,关联会比你刚开始的时候更明显。你的数据库系统依赖于在两个数据表中找到的匹配值来建立关系。如果在数据库系统中发现了一个匹配值,系统将从两个数据表中提取数据并创建一个虚拟的记录。例如,你可能想要查看某个特定的作者所写的全部书籍,在本文中,系统将从“Books”和“Authors”这两个数据表中查找相关的匹配值。需要注意的是,在大多数情况下,查询的结果是动态的,这意味着对这条虚拟记录所做的任何改动都将可能作用到底层的数据表上,这一点是非常重要的。

进行匹配的值都是主键和外键的值。(关系模型不要求一个关系必须对应的使用一个主键来确定。你可以使用数据表中的任何备选关键字来建立关系,但是使用主键是大家都已经接受的标准。)主键(primary key)唯一的识别表中的每个记录。而外键(foreign key)只是简单的将一个数据表中的主键存放在另外一个数据表中。同样地,对于你来说也不需要做太多的工作——只是简单地将主键加到关系表中,并将其定义为外键。

唯一需要注意的是,外键字段的数据类型必须和主键的数据类型相同。但是有些系统可以允许这条规则有一个例外,它允许在数字和自动编号(autonumbering)字段(例如在SQL服务器系统中访问Identity和AutoNumber)之间建立关系。此外,外键的值可以是空(Null),尽管强烈建议在没有特别原因的情况下,不要让外键为空。你有可能永远都不会有机会来使用需要这项功能的数据库。

现在回到我们的示例关系表,并开始输入合适的外键。(请继续在纸上打草稿——在你的数据库系统中创建真正的数据表还为时过早。要知道在纸上纠正错误要容易得多。)要记住,你正在把主键的值添加到关系表里。只要调用实体之间的关系就行了,而其他的就简单了:



[1] [2] [3] 下一页 

上一篇:数据库中生成数据透视表的SQL的效率比较

下一篇:某外企SQL Server面试题


相关软件: 相关文章:
·如何定义数据库表之间的关系

特别声明:本站除部分特别声明禁止转载的专稿外的其他文章可以自由转载,但请务必注明出处和原始作者。文章版权归文章原始作者所有。对于被本站转载文章的个人和网站,我们表示深深的谢意。如果本站转载的文章有版权问题请联系编辑人员,我们尽快予以更正。
[打印本页] [关闭窗口] 转载请注明来源:http://www.abcdown.net
首页 | 本站声明 | 下载帮助 | 发布软件 |
中文版权所有:ABC学院 浙ICP备05000717号