[数据库]SQLServer:什么是主键(PK)和外键(FK)?(图解)

一、主键与外键

1.主键是用来唯一地标识一行数据。主键列必须包含唯一的值,且不能包含空值(null)。

2.主键可以建立在每张二维表中单列或者多列上。

3.一张二维表上的外键可以引用另一张二维表上对应的主键。

 

二、数据库关系图

根据文档内容,学生宿舍管理网站的数据库设计包括六张表:管理员表、楼宇表、宿舍表、宿管表、住宿表、学生表。为了绘制ER,我们可以先绘制每个表的ER,然后将其合并成总ER。 ### 单个表的ER 1. **管理员表 (Admin)** - **id** (int, PK) - **name** (varchar(50)) - **password** (varchar(30)) - **status** (int(2)) 2. **楼宇表 (Building)** - **id** (int, PK) - **name** (varchar(50)) - **location** (varchar(255)) - **dormitory_manager_id** (int, FK) 3. **宿舍表 (Dormitory)** - **id** (int, PK) - **sn** (varchar(10)) - **building_id** (int, FK) - **lived_number** (int(2)) 4. **宿管表 (DormitoryManager)** - **id** (int, PK) - **sn** (varchar(30)) - **name** (varchar(50)) - **password** (varchar(30)) - **sex** (char(1)) 5. **住宿表 (Live)** - **id** (int, PK) - **student_id** (int, FK) - **dormitory_id** (int, FK) - **live_date** (date) 6. **学生表 (Student)** - **id** (int, PK) - **sn** (varchar(30)) - **name** (varchar(50)) - **password** (varchar(30)) - **sex** (char(1)) ### 分ER #### 管理员表 (Admin) ```plaintext +----------------+ | Admin | +----------------+ | id (PK) | | name | | password | | status | +--+ ``` #### 楼宇表 (Building) ```plaintext +----------------+ | Building | +----------------+ | id (PK) | | name | | location | | dormitory_manager_id (FK) | +--+ ``` #### 宿舍表 (Dormitory) ```plaintext +----------------+ | Dormitory | +----------------+ | id (PK) | | sn | | building_id (FK)| | floor | | max_number | | lived_number | +----------------+ ``` #### 宿管表 (DormitoryManager) ```plaintext +----------------+ | DormitoryManager| +----------------+ | id (PK) | | sn | | name | | password | | sex | +----------------+ ``` #### 住宿表 (Live) ```plaintext +----------------+ | Live | +----------------+ | id (PK) | | student_id (FK)| | dormitory_id (FK)| | live_date | +--+ | Student | +----------------+ | id (PK) | | sn | | name | | password | | sex | +----------------+ ``` ### 总ER 将上述各表的关系合并成总ER: ```plaintext +----------------+ +----------------+ +----------------+ | Admin | | Building | | DormitoryManager| +----------------+ +----------------+ +----------------+ | id (PK) | | id (PK) | | id (PK) | | name | | name | | sn | | password | | location | | name | | status | | dormitory_manager_id (FK) | password | +----------------+ +----------------+ | sex | | building_id (FK)| +----------------+ | Dormitory | +----------------+ | id (PK) | | sn | | floor | | max_number | | lived_number | +--+ | | v +----------------+ +----------------+ +----------------+ | Student | | Live | | | +--+ +----------------+ | | | id (PK) | | id (PK) | | | | sn | | student_id (FK)| | | | name | | dormitory_id (FK)| | password | | live_date | | | | sex | +--+ | student_id (FK)| | | | dormitory_id (FK)| +----------------+ ``` ### 关系说明 - **Admin** **Building** 之间没有直接关系。 - **Building** **DormitoryManager** 之间是多对一关系(一个宿管可以管理多个楼宇)。 - **Building** **Dormitory** 之间是一对多关系(一个楼宇可以有多个宿舍)。 - **Dormitory** **Live** 之间是一对多关系(一个宿舍可以有多次住宿记录)。 - **Student** **Live** 之间是一对多关系(一个学生可以有多次住宿记录)。 通过以上ER,可以清晰地展示学生宿舍管理网站的数据库结构及其关系。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值