学会sql数据库关系图(Petshop)
来源:asp之家 发布时间:2012-10-07 10:34:49
很久以前就知道微软的Petshop的很经典,昨天抽出时间去学习,一开始还真的不适应,什么成员资格,还真的看不太懂,运行petshop想从登陆学起,但是用户名和密码都不知道,后来发现有更注册的页面,自己注册了一个页面,才发现还得从数据库出发。花了这么多时间最终还是回到了数据库,但是数据库中一张一张的表格找不到脚本,也不是自己设计的数据库,完全没有一点头绪,后来突然想起来sql有个数据库关系图,可以很快的适合数据库程序员很快的掌握数据库表之间的关系。于是开始了我的百度之旅,关于数据库的关系图的文章还真的很少,于是我开始根据petshop,然后建立数据库关系图,开始掌握数据库关系图。我点击MSPetShop4Services这个数据库,存放着用户的信息。但是原版的是没有数据库关系图。
首先我们自己动手来新建一张数据库关系图吧,找到相应的数据库(图1),在第一行中有个数据库关系图,我们右击选择新建数据库关系图(N),如图2:
(图1) (图2)
这个时候会跳出一个添加表对话框,这里我们可以选择我们想要的表,如果想要全部选中,则这样操作,先鼠标点重第一个然后按住shift+鼠标点重最后一个,来完成操作。最后表格位子整理一下,然后ctrl+s保存一下,数据关系图的名字,那么数据库关系图基本建立好了。接下来就是分析了。
(添加表对话框图) (选中表对话框图)
整个MSPetShop4Services数据库的关系图。整个这幅图,是不是看着一张一张的表格了解表之间的关系舒服多了,当然我们还是要看懂整个表的意思,首先最上面的是表名,下面的都是字段,有些字段左边有个钥匙,那是主键的意思。在表之间有个线连着就说明这两个表之间存在主键和外键的关系,其中一半都有钥匙的指的是主键,一个无穷大的符号表示的外键。但是不知道细心的朋友有没有发现一个问题,比如说aspnet_Paths和aspnet_PersonalizationAllUsers表之间的线的两端都是钥匙的,我也找了很久资料没有找到,于是自己写代码测试了,到底是什么意思。
通过自己的代码了解图中线的含义:
我自己定义是一个学生选课的关系图:
sql脚本代码如下:
CREATE TABLE Student
(
[Sid] INT NOT NULL PRIMARY KEY, --学生编号
SNAme VARCHAR(10) NOT NULL --学生姓名
)
CREATE TABLE Course(
[Cid] INT NOT NULL PRIMARY KEY, --课程编号
CName VARCHAR(10) NOT NULL --课程名
)
CREATE TABLE SC(
[Sid] INT NOT NULL,
[Cid] INT NOT NULL,
Grade INT NOT NULL, --成绩
FOREIGN KEY([SID]) REFERENCES Student2([Sid]),
FOREIGN KEY([CID]) REFERENCES Course2([Cid])
)
出来的关系图如下:
这个数据图是我们知道的主键外键的关系,也是符合我们思维的。
接着我在代码里面改了一行代码,图就变调了,代码如下:
CREATE TABLE Student2
(
[Sid] INT NOT NULL PRIMARY KEY, --学生编号
SNAme VARCHAR(10) NOT NULL --学生姓名
)
CREATE TABLE Course2(
[Cid] INT NOT NULL PRIMARY KEY, --课程编号
CName VARCHAR(10) NOT NULL --课程名
)
CREATE TABLE SC2(
[Sid] INT NOT NULL PRIMARY KEY,
[Cid] INT NOT NULL,
Grade INT NOT NULL, --成绩
FOREIGN KEY([SID]) REFERENCES Student2([Sid]),
FOREIGN KEY([CID]) REFERENCES Course2([Cid])
)
对应的关系图如下:
我相信你们看到了吧,两个钥匙的线段。好了那我们应该了解了吧,我们可以得出这样的结论,如果一个表中是主键,而另一个表中却是普通的字段,那显示的效果是一个钥匙一个无穷大,钥匙指向主键,无穷大指向外键,但是当外键在另一张表中也作为主键,那此时无穷大也变为了钥匙。此时我们不能看线了。那要怎么分析主键和外键呢?别急往下看。这里介绍两个方法,第一个比较简答,我们把鼠标放到这个线上面,他会跳出一行提示,在前面的表名是主键,后面的是外键,最后的是关系的名字(这个是我自己看表得出的结论),还有一个方法,但是我们事先也要用这个方法,知道这个关系的名字,然后点击两个表中随便的哪一张表,右击选择关系,找到相应的关系名,然后选择右边的表和列规范,里面就写明了主外键的关系了。好了就写到这里了。
总结:
遇到难的我们先不要怕,从最基本的做起,也可以自己建立测试数据来验证遇到的新的知识。
猜你喜欢
- 1、使用索引来更快地遍历表。缺省情况下建立的索引是非群集索引,但有时它并不是最佳的。在非群集索引下,数据在物理上随机存放在数据页上。合理的索
- MySQL内部复制功能是建立在两个或两个以上服务器之间,通过设定它们之间的主-从关系来实现的。其中一个作为主服务器,其它的作为从服务器。本节
- 1. 开始前本程序基于tkinter生成GUI,使用前请确保已经安装好tkinter对于windows用户,您可能已经安装了tkinter,
- 需求最近公司干活,收到一个需求,说是让手动将数据库查出来的信息复制粘贴到excel中,在用excel中写好的公式将指定的两列数据用updat
- 一、并发访问控制实现的并发访问的控制技术是基于锁;锁分为表级锁和行级锁,MyISAM存储引擎不支持行级锁;InnoDB支持表级锁和行级锁;锁
- math模块# 数学相关模块import mathr = math.floor(3.2) # 向下取整print(r)r = math.ce
- 先看要实现的饼图效果图方法一:使用seriesseries: [ { &
- 爬取TOP500的音乐信息,包括排名情况、歌曲名、歌曲时间。网页版酷狗不能手动翻页进行下一步的浏览,仔细观察第一页的URL:http://w
- 测试字符串:<style>v\:* { BEHAVIOR: url(#default#VML) } o\:* { BEHAVIO
- 阅读上一篇:你是真正的用户体验设计者吗? Ⅱ系统和用户环境设计苹果系统成功在于系统架构。简化系统本身,设备只能变得更好、更小、性能更强大。在
- 一、创建一个项目如果这是你第一次使用Django,那么你必须进行一些初始设置。也就是通过自动生成代码来建立一个Django项目--一个Dja
- Python是一种非常富有表现力的语言。它为我们提供了一个庞大的标准库和许多内置模块,帮助我们快速完成工作。然而,许多人可能会迷失在它提供的
- 方法一、SELECT SUM(正确数)+SUM(错误数) AS 总记录数,SUM(正确数),SUM(错误数) FROM ( SELECT C
- 进入root 权限下apt-get install mysql-serverapt-get install mysql-client创建数据
- 前言Go语言的序列化与反序列化在工作中十分常用,在Go语言中提供了相关的解析方法去解析JSON,操作也比较简单序列化// 数据序列化func
- 之前用Crystal做了一个数字转English Word的Formula刚刚心血来潮, 大半个晚上写了JS版本的数字转换, 由于JS的Bu
- 以前在工作中遇到一个问题,当表单发送的数据量很大时,就会报错。查阅MSDN了解到,原因是微软对用Request.Form()可接收的最大数据
- 一、介绍线程是什么?线程有啥用?线程和进程的区别是什么?线程是操作系统能够进行运算调度的最小单位。被包含在进程中,是进程中的实际运作单位。一
- 下面这段代码,不会替换ld<sad中间的<,所以内容仍然是正常的 <% function nohtml(str) dim
- 详解Python中的三元运算什么是三元运算符在大部分编程语言中都有三目运算,也称三元运算,Python语言从Python2.5版本开始也引入