数据库主键,外键,超建,索引

主键(Primary Key)——数据的身份证

** 核心作用**:唯一标识表中的每一行,必须唯一且非空

举个栗子(学生表)

学号(主键)姓名年龄
1001张三18
1002李四19

关键点

  1. 主键就像身份证号,不可重复(两个学生不能有相同学号)
  2. 主键可以是单个字段(如学号)或联合字段(如学号+课程号)
  3. 实际开发中常用自增ID或UUID作为主键

正确用法

CREATE TABLE Students (
    学号 INT PRIMARY KEY, -- 明确指定主键
    姓名 VARCHAR(20),
    年龄 INT
);

** 错误示范**:
用「姓名」当主键 → 可能出现重名学生,违反唯一性!


外键(Foreign Key)——表之间的介绍信

核心作用:建立表之间的关联,确保引用完整性

举个栗子(选课表引用学生表)

选课ID学号(外键)课程名
11001数据库
21001算法

关键点

  1. 外键像介绍信,必须指向另一个表的主键(如选课表的学号对应学生表的学号)
  2. 外键约束可防止无效数据(比如无法插入一个不存在的学生学号到选课表)
  3. 可设置级联操作(如删除学生时,自动删除他的选课记录)

正确用法

CREATE TABLE Courses (
    选课ID INT PRIMARY KEY,
    学号 INT,
    课程名 VARCHAR(20),
    FOREIGN KEY (学号) REFERENCES Students(学号) -- 外键约束
);

** 错误示范**:
选课表的学号填写2000 → 但学生表中没有2000号学生,导致数据不一致!


超键(Super Key)——备用的身份证组合

核心作用:能唯一标识行的属性集合(可能包含冗余字段)

举个栗子
学生表中,以下组合都是超键:

  1. {学号}
  2. {学号, 姓名}
  3. {学号, 年龄}

关键点

  1. 超键是候选键的超集(候选键是最小的超键)
  2. 主键是从候选键中选出的一个
  3. 超键可以有冗余,比如{学号,姓名}中姓名是多余的

正确理解

  • 超键像备用钥匙包,里面可能有多把钥匙
  • 主键是其中最常用的一把钥匙

索引(Index)——数据的目录

** 核心作用**:加速查询,但会增加写操作开销

** 举个栗子**
没有索引的查询:

SELECT * FROM Students WHERE 姓名='张三'; -- 需要逐行扫描全表

创建索引后:

CREATE INDEX idx_name ON Students(姓名); -- 给姓名列建索引
-- 再查时像查字典一样快速定位

关键点

  1. 索引像书籍目录,用空间换时间
  2. 常见索引类型:B树索引(默认)、哈希索引、全文索引
  3. 适合索引的场景
    • WHERE条件频繁使用的列(如学号、手机号)
    • JOIN的关联字段
    • ORDER BY/GROUP BY的列

** 错误示范**:
给性别列建索引 → 只有“男/女”两种值,区分度低,索引效果差


一句话总结关系

  • 主键:数据的身份证 → 唯一且必需
  • 外键:表之间的介绍信 → 保证你认识对方
  • 超键:备用钥匙包 → 能开门但可能累赘
  • 索引:书籍目录 → 查得快但书会变厚

实际应用小贴士

  1. 主键选择
    • 优先用无意义的自增数字(如ID),避免用业务字段(如手机号可能变化)
  2. 外键使用
    • 在应用层或数据库层均可实现,但要考虑性能影响
  3. 索引优化
    • 不要过度索引(一般表不超过5个索引)
    • 联合索引注意字段顺序(如INDEX(a,b) 能优化 WHERE a=1 AND b=2,但无法优化 WHERE b=2)

** 举个综合栗子**
设计一个「图书馆管理系统」:

  1. 主键:书籍表用ISBN作为主键
  2. 外键:借阅记录表的ISBN字段外键关联书籍表
  3. 索引:给借阅记录表的「借书日期」建索引,方便按时间查询
  4. 超键:书籍表中{ISBN, 书名}是超键,但只需用ISBN作主键
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值