数据库设计,高手进,帮我分析出怎样设计表以及关系图

数据库设计,高手进,帮我分析出怎样设计表以及关系图,第1张

表一:医护人员表,主属性:编号,其他属性:姓名,所属科名,职称,是否护士长或主任;

表二病房表,主属性:病房号,其他属性:病床,所属科名,最大病床数

表三:病人表,主属性:病人编号,其他属性:姓名,年龄,性别,病房号,病床号,病历信息,治疗信息,

表四:科表,主属性:科名,其它属性:值班电话

(如果一个病人有可能同时看好几科病的话再多一个表

表五医患关系表:主属性:病人编号和医生编号,没有别的属性

否则的话将主治医生编号加到病人表里)

关系图没办法贴耶,大致这样,前四个表名是四个实体,

关系:13是多对多,14是多对一,23是一对多,24多对一

应该是满足4范式了(再高的范式偶也没学过,不知道满不满足)

查询时会用到表连接,以及count函数

方法如下:

选中这个数据库

新建一个查询,输入下面的脚本:

EXEC

sp_dbcmptlevel

database_name,

90

USE

database_name

EXEC

sp_changedbowner

'sa'

其中,database_name是此数据库的名称

运行可能需要一段时间,运行完成后,点击"关系图",刷新,应该就可以看到关系图了

MS SQL05及以下版本可以自动生成关系图,我的08就不能。

客户名不排除姓名相同的,所以客户表(id Primary key,……)

产品名不排除产品名相同型号不同的,所以产品表(productid primary key,……)

订单表里需要有下订单的客户和订的产品,所以需要与客户表和产品表通过外键关联。

一个客户可以在不同时段订同一个产品,所以订单id为订单表主键,做外键的字段必须是其依赖表的主键,所以订单表外键为客户id和产品productid

订单表(订单id primary key,id foreign key references 客户表(id),productid foreign key references 产品表(productid),……)

你写的订单表样式可以通过视图实现 订单视图(订单id,客户名,产品名,……)

主外键设置或者编写完毕后,左边对象资源管理器,数据库下面,右键数据库关系图,生成数据库关系图

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

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

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

例如

定义表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表中的数据,看看定义关系后有何作用。

对于任何数据库,都可以创建任意多个数据库关系图;每个数据库表都可以出现在任意数量的关系图中。这样,便可以创建不同的关系图使数据库的不同部分可视化,或强调设计的不同方面。例如,可以创建一个大型关系图来显示所有表和列,并且可以创建一个较小的关系图来显示所有表但不显示列。

所创建的每个数据库关系图都存储在相关联的数据库中。

参照关系就是主外键,其最重要的作用是保护你的数据的完整性。

SQL的主键和外键的作用:

外键取值规则:空值或参照的主键值。

(1)插入非空值时,如果主键表中没有这个值,则不能插入。

(2)更新时,不能改为主键表中没有的值。

(3)删除主键表记录时,你可以在建外键时选定外键记录一起级联删除还是拒绝删除。

(4)更新主键记录时,同样有级联更新和拒绝执行的选择。

简而言之,SQL的主键和外键就是起约束作用。

关系型数据库中的一条记录中有若干个属性,若其中某一个属性组(注意是组)能唯一标识一条记录,该属性组就可以成为一个主键。

比如:

学生表(学号,姓名,性别,班级)

其中每个学生的学号是唯一的,学号就是一个主键;

课程表(课程编号,课程名,学分)

其中课程编号是唯一的,课程编号就是一个主键;

成绩表(学号,课程号,成绩)

成绩表中单一一个属性无法唯一标识一条记录,学号和课程号的组合才可以唯一标识一条记录,所以,学号和课程号的属性组是一个主键。

成绩表中的学号不是成绩表的主键,但它和学生表中的学号相对应,并且学生表中的学号是学生表的主键,则称成绩表中的学号是学生表的外键;同理,成绩表中的课程号是课程表的外键。

定义主键和外键主要是为了维护关系数据库的完整性,总结一下:

一、主键是能确定一条记录的唯一标识,比如,一条记录包括身份正号,姓名,年龄。身份z号是唯一能确定你这个人的,其他都可能有重复,所以,身份z号是主键。

外键用于与另一张表的关联。是能确定另一张表记录的字段,用于保持数据的一致性。比如,A表中的一个字段,是B表的主键,那他就可以是A表的外键。

二、主键、外键和索引的区别

定义:

主键--唯一标识一条记录,不能有重复的,不允许为空

外键--表的外键是另一表的主键, 外键可以有重复的, 可以是空值

索引--该字段没有重复值,但可以有一个空值

作用:

主键--用来保证数据完整性

外键--用来和其他表建立联系用的

索引--是提高查询排序的速度

个数:

主键--主键只能有一个

外键--一个表可以有多个外键

索引--一个表可以有多个唯一索引

创建SQL的主键和外键约束的方法:

create table Student --建表格式:create table 自定义的表名

( --字段名一般为有一定意义的英文

StudentName nvarchar(15), -- 格式:字段名类型()括号里面的是允许输入的长度

StudentAge int, --int型的后面不需要接长度

StudentSex nvarchar(2) --最后一个字段后面不要逗号

)

--在创建表时就可以对字段加上约束:

create table Student

(

StudentNo int PRIMARY KEY IDENTITY(1,1), --加主键约束,还有标识列属性(两者构成实体完整性)

StudentName nvarchar(15) not null, --加非空约束,不加"not null" 默认为:可以为空

StudentSchool text(20) FOREIGN KEY REFERENCES SchoolTable(SchoolName), --加外键约束,格式:FOREIGN KEY REFERENCES 关联的表名(字段名)

StudentAge int DEFAULT ((0)), --加默认值约束

StudentSex nvarchar(2) CHECK(StudentSex=N'男' or StudentSex=N'女') --加检查约束,格式:check (条件表达式)

)

--如果在表创建好了以后再加约束,则格式分别为:

-- 主键:

alter table 表名

add constraint PK_字段名--"PK"为主键的缩写,字段名为要在其上创建主键的字段名,'PK_字段名'就为约束名

primary key (字段名) --字段名同上

--唯一约束:

alter table 表名

add constraint UQ_字段名

unique (字段名)

--外键约束:

alter table 表名

add constraint FK_字段名--"FK"为外键的缩写

foreign key (字段名) references 关联的表名(关联的字段名) --注意'关联的表名'和'关联的字段名'

alter table 表A add constraint FK_B foreign key (ticket_no) references 表B(ticket_no)

alter table 表A add constraint FK_C foreign key (person_no) references 表C(person_no)

alter table 成绩表 add constraint FK_StudentNo foreign key (StudentNo) references Student (StudentNo)

ON UPDATE CASCADE ON DELETE CASCADE

级联更新,级联删除,这样在删除主表Student时,成绩表中该学生的所有成绩都会删除。

--检查约束:

alter table 表名

add constraint CK_字段名

check (条件表达式) --条件表达式中的条件用关系运算符连接

--默认值约束:

alter table 表名

add constraint DF_字段名

default '默认值' for 字段名--其中的'默认值'为你想要默认的值,注意'for'

--删除创建的约束:

alter table 表名

drop constraint 约束名--约束名为你前面创建的如:PK_字段这样的约束名

--注意:如果约束是在创建表的时候创建的,则不能用命令删除

--只能在'企业管理器'里面删除

-- 获取SqlServer中表结构

SELECT syscolumnsname,systypesname,syscolumnsisnullable,

syscolumnslength

FROM syscolumns,systypes

WHERE syscolumnsxusertype = systypesxusertype

AND syscolumnsid = OBJECT_ID('Student')

-- 单独查询表递增字段

SELECT [name] FROM syscolumns WHERE

id = OBJECT_ID(N'Student') AND COLUMNPROPERTY(id,name,'IsIdentity')=1

-- 获取表主外键约束

EXEC sp_helpconstraint 'StuResults'

-- 查询表主键外键信息

SELECT sysobjectsid objectId,OBJECT_NAME(sysobjectsparent_obj) tableName,

sysobjectsname constraintName, sysobjectsxtype AS constraintType,

syscolumnsname AS columnName

FROM sysobjects INNER JOIN sysconstraints

ON sysobjectsxtype in('C', 'F', 'PK', 'UQ', 'D')

AND sysobjectsid = sysconstraintsconstid

LEFT OUTER JOIN syscolumns ON sysconstraintsid = syscolumnsid

WHERE OBJECT_NAME(sysobjectsparent_obj)='StuResults'

以上就是关于数据库设计,高手进,帮我分析出怎样设计表以及关系图全部的内容,包括:数据库设计,高手进,帮我分析出怎样设计表以及关系图、SQL2005如何建立数据库关系图、sql数据库关系图设计等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

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

原文地址: http://outofmemory.cn/sjk/10182762.html

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

发表评论

登录后才能评论

评论列表(0条)

保存