数据库设计
数据库设计简介
- 软件研发步骤
需求分析——>设计——>编码——>测试——>安装部署
(1).产品经理对需求进行分析,写出产品原型。
(2).设计由架构师和高级开发工程师来完成,具体由:软件结构设计、数据库设计、接口设计和过程设计。
(3).编码由开发工程师来做。
(4).测试由测试工程师来做。
(5).最后,安装部署由运维工程师来负责。
- 数据库设计概念
- 数据库设计就是根据业务系统的具体需求,结合我们所选用的DBMS,为这个业务系统构造出最优的数据存储模型。
- 内容就是建立数据库中的表结构,以及表与表之间的关联关系的过程。
- 有哪些表?表里有哪些字段?表和表之间有哪些关系?
- 数据库设计的步骤
- 数据分析(数据是什么?数据有哪些属性?数据与属性的特点是什么?)
- 逻辑分析(通过ER图(实体关系图)对数据库进行逻辑建模,不需要考虑我们所选用的数据库管理系统)
- 物理设计(根据数据库自身的特点把逻辑设计转化为物理设计)
- 维护设计(1.对新的需求进行建表;2.对表进行优化)
表关系
表关系之一对多
- 如:部门和员工的关系,一个部门有多个员工,但一个员工只属于一个部门。
- 实现方式:再多的一方建立外键,指向少的一方的主键。
表关系之多对多
- 如:商品与订单的问题,一个商品可以创建多个订单,一个订单也可以购买多个商品。
- 实现方式:建立第三张中间表,中间表至少包含两个外键,分别关联两个主键。
表关系之一对一
-
如:每个人只有一个身份证,一个身份证只对应一个人。
- 可以进行表的拆分,把常用的信息和不常用的信息分开,分开查询。用于提升查询性能。
-
实现方式:在任何一方加入外键来管理主键。并且设置外键为唯一(unique)。
数据库设计案例
/*
数据库案例设计
*/
DROP TABLE IF EXISTS music;
DROP TABLE IF EXISTS song;
DROP TABLE IF EXISTS user;
DROP TABLE IF EXISTS review;
DROP TABLE IF EXISTS tb_music_user;
CREATE TABLE music(
id INT PRIMARY KEY UNIQUE auto_increment,
title varchar(32),
alias VARCHAR(32),
image VARCHAR(64),
style VARCHAR(8),
medium VARCHAR(4),
publish_time DATE,
publisher VARCHAR(16),
number TINYINT,
barcode BIGINT,
summary VARCHAR(1024) ,
artist VARCHAR(16)
);
CREATE TABLE song(
id INT UNIQUE PRIMARY KEY auto_increment,
name varchar(32),
serial_name TINYINT
);
CREATE TABLE review(
content VARCHAR(256),
rating TINYINT,
review_time datetime,
table_id INT
);
CREATE TABLE user(
id INT PRIMARY KEY,
username VARCHAR(16),
image VARCHAR(64),
signature VARCHAR(64),
nickname VARCHAR(16)
);
CREATE TABLE tb_music_user(
id INT PRIMARY KEY UNIQUE auto_increment,
music_id INT,
user_id INT
);
ALTER TABLE song ADD CONSTRAINT fk_music_song FOREIGN KEY(id) REFERENCES music(id);
ALTER TABLE review ADD CONSTRAINT fk_music_review FOREIGN KEY(table_id) REFERENCES music(id);
ALTER TABLE review ADD CONSTRAINT fk_user_review FOREIGN KEY(table_id) REFERENCES user(id);
ALTER TABLE tb_music_user ADD CONSTRAINT fk_music_id FOREIGN KEY(music_id) REFERENCES music(id);
ALTER TABLE tb_music_user ADD CONSTRAINT fk_user_nickname FOREIGN KEY(user_id) REFERENCES user(id);
- 外键的数据类型要和主键一致,否则无法创建!