数据库中定义表和建立完整性代码

本文详细介绍了使用SQL语句创建数据库表的过程,并为不同表定义了各种完整性约束条件,包括主键、外键、检查约束等。通过具体示例展示了如何确保数据的一致性和准确性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

--***************************************实验一******************************************
--**********************************建立表和定义完整性约束**************************
create database js
use  js
drop table 院系
create table 院系( 编号     smallint   Primary key,
                   名称     char(20) not null,
                   负责人   char(10),
                   办公地点 char(20),
                   constraint uniquea unique (名称)
                   )


create table 学生( 学号 char(8) Primary key,
                    院系 smallint,
                    姓名 char(10),
                    性别 char(2) check(性别 in('男','女')),
                    生源 char(6),  
                    状态 char(4) check(状态 in('正常','留级','休学','退学')))




drop table 教师
create table 教师( 教师编号 char(8) Primary key,
                   院系 smallint  foreign key references 院系(编号),
                   姓名 char(10),
                   性别 char(2) check(性别 in('男','女')),
                   职称 char(6) check(职称 in('教授','副教授','讲师','助教')),
                   专业 char(10))
 
drop table 课程           
create table 课程( 课程编号 char(8)Primary key,
                   课程名称 char(20)not null,
                   责任教师 char(8)foreign key references 教师(教师编号),
                   学时 smallint not null,
                   课程性质 char(10) check(课程性质 in('公共基础','专业基础','专业选修','任意选修')))
              
             
drop table 选课
create table 选课( 学号 char(8)foreign key references 学生(学号) on delete cascade,
                   课程编号 char(8) foreign key references 课程(课程编号),
                   成绩 smallint  check(成绩>=0 and 成绩<=100)default null,
                   primary key(学号,课程编号))




--实验要求
alter table 学生 add 平均成绩 smallint default null


alter table 课程 add constraint  chk_xueshi check(学时%8=0) 
alter table 课程  alter column 学时 smallint not null


alter table 院系 drop  constraint uniquea
alter table 院系 alter column 名称 varchar(30)
alter table 院系 add  constraint uniquea unique(名称)


alter table 教师 add 工资 numeric(5,2)
   
   









1. 在studentdb数据库中利用查询分析器创建以下3个表,同时完成数据完整性的定义(实体完整性、参照完整性用户定义的域完整性): student(学生信息表): 主码 列名 数据类型 宽度 小数位 空否 取值范围 备 注 Pk sno char 5   N 学号   sname char 10   N 姓名   ssex char 2   Y 性别   sage smallint Y 不小于12 年龄 sdept char 15 Y 系名 course(课程表): 主码 列名 数据类型 宽度 小数位 空否 备 注 Pk cno Char 2   N 课程号   cname Char 20   Y 课程名称   cpno Char 2   Y 先行课号   ccredit smallint Y 学分 sc(学生选课表): 主码 列名 数据类型 宽度 小数 空否 外码 参照关系 取值范围 备 注 Pk sno Char 5   N Fk student 学号 cno Char 2   N Fk course 课程号   grade Decimal 5 1 Y 0≤x≤100 成绩 2. 在spjdb数据库中利用查询分析器创建以下4个表,同时完成数据完整性的定义(实体完整性、参照完整性用户定义的域完整性): S(供应商信息表): 主码 列名 数据类型 宽度 小数位 空否 取值范围 备 注 Pk sno char 2   N 供应商号   sname char 10   N 供应商名称   status smallint Y 大于0 供应商状态 city char 10 Y 所在城市 P(零件信息表): 主码 列名 数据类型 宽度 小数位 空否 取值范围 备 注 Pk pno char 2   N 零件号   pname char 10   N 零件名称 color char 2 Y 颜色   weight smallint Y 大于0 重量 J(工程项目表): 主码 列名 数据类型 宽度 小数位 空否 取值范围 备 注 Pk jno char 2   N 工程项目号   jname char 10   N 工程项目名称 city char 10 Y 所在城市 SPJ(供应情况表): 主码 列名 数据类型 宽度 小数 空否 外码 参照关系 取值范围 备 注 Pk sno Char 2   N Fk S 供应商号
### MySQL 数据库中表与完整性的定义 #### 表的定义 在 MySQL 中,**表(Table)** 是数据库的核心组成部分之一。它是存储结构化数据的地方,由行列组成。每列表示一种属性(字段),而每行则表示一条记录。通过创建表,可以定义数据的具体结构以及如何对其进行操作。 例如,在学生管理系统中,“student”表可能包含 `studentID` `name` 字段来分别代表学号姓名。可以通过 SQL 的 `CREATE TABLE` 语句定义这些字段及其特性[^3]。 ```sql CREATE TABLE student ( studentID INT NOT NULL, name VARCHAR(50), PRIMARY KEY (studentID) ); ``` 上述代码片段展示了如何创建一个简单的 “student” 表,并指定 `studentID` 作为主键以确保唯一性。 --- #### 完整性的定义 **完整性(Integrity)** 是指保护数据库免受不符合规则的数据进入的一种机制。MySQL 提供了几种类型的完整性约束,用于维护数据的质量一致性: 1. **实体完整性** 实体完整性要求表中的每一行都必须是唯一的实体。这通常通过设定主键(Primary Key)实现。主键不仅不允许重复值,也不允许空值(NULL)。这种约束有助于区分不同行并保持数据的一致性可追踪性[^1]。 2. **域完整性** 域完整性涉及对表中各列所接受值的类型、范围精度的规定。比如,对于年龄这一列,可以限定其只接收正整数且不超过一定数值。此约束可通过设置数据类型、默认值或检查条件完成。 3. **参照完整性** 参照完整性用来维持两个表之间外键关系的有效性。当一张表中的某些列依赖于另一张表时,需保证关联双方的数据同步更新或者删除行为受到控制。例如,分数表中的课程编号应当对应到课程表中存在的某门课[^4]。 4. **用户自定义完整性** 此类完整性是由开发者根据具体应用场景额外施加的一些特殊限制条件。它可以超越标准框架之外,满足更复杂的需求。例如,规定某个订单状态只能处于预设集合内的几种情况之中。 --- #### 综合实例说明 下面是一个综合运用多种完整性的例子——构建两表间的关系模型:“course”(课程表)“score”(成绩表)。 ```sql -- 创建 course 表 CREATE TABLE course ( courseno CHAR(8) NOT NULL, -- 设置为非空字符型长度固定为8位 coursename VARCHAR(100), -- 存储课程名称字符串形式最长可达百字 credit TINYINT UNSIGNED CHECK (credit BETWEEN 1 AND 6), -- 学分介于1至6之间的小整数 PRIMARY KEY(courseno) -- 主键声明使该栏位不可重复亦不能为空 ); -- 创建 score 表 并建立外键连接 CREATE TABLE score ( studentno INT NOT NULL REFERENCES student(studentID), -- 外键指向 student 表 primary key courseno CHAR(8) NOT NULL FOREIGN KEY REFERENCES course(courseno), -- 关联 course 表 primary key grade DECIMAL(4 , 1 ) DEFAULT '0.0' CHECK (grade >= 0 AND grade <= 100), -- 成绩合法区间定界 UNIQUE(studentno,courseno) -- 联合唯一索引防止同一学生多次录入同科目的评分信息 ); ``` 以上脚本体现了从单一表格内部直到跨多表交互层面的各种层次上的完整性保障措施。 --- ### 结论 综上所述,MySQL 数据库中的表是用来组织管理数据的基础单元,而完整性则是为了确保这些数据始终遵循既定规则从而具备可靠性可用性的重要概念体系。无论是基本的实体还是复杂的用户定制方面都有相应的技术手段予以支持。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值