06_MySQL笔记-数据类型-字段属性-存储引擎-字符集-创建新表-数据库建模


个人博客
https://blog.csdn.net/cPen_web


数据类型

数据类型 - 日期和时间类型

https://www.runoob.com/mysql/mysql-data-types.html

年		year
月		month
日		day
小时		hour
分钟		minute
秒		second

timestamp --> 时间戳:距离1970-1-1 0:0:0为起点 有多少秒  格林尼治时间
1970-01-01 00:00:00/2038	到2038年存放不了;4个字节
root@sanchuang mysql>create table t7(name varchar(20),birthday date,check_sc timestamp);
root@sanchuang mysql>desc t7;
+----------+-------------+------+-----+-------------------+-----------------------------+
| Field    | Type        | Null | Key | Default           | Extra                       |
+----------+-------------+------+-----+-------------------+-----------------------------+
| name     | varchar(20) | YES  |     | NULL              |                             |
| birthday | date        | YES  |     | NULL              |                             |
| check_sc | timestamp   | NO   |     | CURRENT_TIMESTAMP | on update CURRENT_TIMESTAMP |
+----------+-------------+------+-----+-------------------+-----------------------------+
3 rows in set (0.00 sec)

root@sanchuang mysql>insert into t7(name,birthday,check_sc) values('cali','1984-10-01',now());
root@sanchuang mysql>select * from t7;
+------+------------+---------------------+
| name | birthday   | check_sc            |
+------+------------+---------------------+
| cali | 1984-10-01 | 2021-02-15 14:40:52 |
+------+------------+---------------------+
1 row in set (0.00 sec)
root@sanchuang mysql>insert into t7(name,birthday,check_sc) values('rose','1984-10-01','2038-1-1 12:22:22');
#示例:now()函数  获取当前时间
root@(none) mysql>select now();

字符串类型

https://www.runoob.com/mysql/mysql-data-types.html

字符串
	char
	varchar
	text
	blob		二进制的文本
		tinyblob
		MEDIUMBLOB
		LONGBLOB
		blob
	enum		枚举
	set			集合
	binary和varbinary
一个英文字母占1个字节
1个汉字,如果是utf8编码,占3个字节
root@sanchuang mysql>select name,length(name),char_length(name) from t8;
+-----------+--------------+-------------------+
| name      | length(name) | char_length(name) |
+-----------+--------------+-------------------+
| feng      |            4 |                 4 |
| 冯德勇    |            9 |                 3 |
+-----------+--------------+-------------------+
2 rows in set (0.00 sec)

length(name)统计字符串的存储的字节数
char_length(name)统计的是字符的个数

char和varchar有什么区别?

存储方式
char	固定长度的字符串类型 character 字符 --> 在存储的时候,不够固定长度,就在前面填充空格,达到固定长度
	'feng' 但是我的表结构里的长度是30,在存储feng字符串的时候,会在前面填充26个空格来达到30个字符的长度

varchar	可变长的字符串类型  variable character 
	'feng' 我的表结构里的长度是30,但是只是存储feng这4个字符,不填充空格

	char比varchar在长度没有达到规定的时候,更加消除磁盘空间些。如果达到了规定长度,varchar要比char多一个字节的存储空间

虽然VARCHAR数据类型可以节省存储空间,提高数据处理的效率。但是其可变长度带来的一些负面效应,有时候会抵消其带来的优势。

char存储定长数据很方便,char字段上的索引效率很高。


长度方面
	char 最大长度255  varchar 最大长度是65,535


检索的方式不同
	一个长度CHAR列被固定在创建表声明的长度。长度可以是0到255之间的任何值。CHAR 存储值时,将在它们的右边填充空格以达到指定的长度。当CHAR被检索到的值,拖尾的空格被删除
ValueCHAR(4)Storage RequiredVARCHAR(4)Storage Required
‘’’    ’4 bytes‘’1 byte
‘ab’'ab  ’4 bytes‘ab’3 bytes
‘abcd’‘abcd’4 bytes‘abcd’5 bytes
‘abcdefgh’‘abcd’4 bytes‘abcd’5 bytes

枚举类型 ENUM

CREATE TABLE shirts ( 
name VARCHAR(40), 
size ENUM('x-small', 'small', 'medium', 'large', 'x-large') 
);

INSERT INTO shirts (name, size) VALUES ('dress shirt','large'), ('t-shirt','medium'), ('polo shirt','small');

SET类型

集合类型:插入数据的时候,必须是集合里有的内容,如果没有,就会报错,不能插入,而且插入重复的数据,只显示一个
root@sanchuang mysql>CREATE TABLE myset (col SET('a', 'b', 'c', 'd'));

root@sanchuang mysql>INSERT INTO myset (col) VALUES
    -> ('a,d'), ('d,a'), ('a,d,a'), ('a,d,d'), ('d,a,d');

root@sanchuang mysql>select * from myset;
+------+
| col  |
+------+
| a,d  |
| a,d  |
| a,d  |
| a,d  |
| a,d  |
+------+
5 rows in set (0.00 sec)

如何知道一张表的结构?

1 .desc t1
2 .show create table t1

创建表的语法

#示例:if not exists
如果要创建的表已经存在,强制不显示错误消息

root@sanchuang mysql>create table if not exists sanchuang.chenpeng(id int primary key,name varchar(10) not null);
root@sanchuang mysql>desc chenpeng;
+-------+-------------+------+-----+---------+-------+
| Field | Type        | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| id    | int(11)     | NO   | PRI | NULL    |       |
| name  | varchar(10) | NO   |     | NULL    |       |
+-------+-------------+------+-----+---------+-------+
2 rows in set (0.00 sec)
#示例:查看警告信息
root@sanchuang mysql>show warnings;
show命令汇总:
1 .show databases;
2 .show tables;
3 .show variables;
4 .show processlist;		#注:查看哪些人链过来
5 .show create table t1
6 .show warnings;

字段属性

约束:对某个字段里的内容进行限制
添加数据类型选项

	unsigned			无符号整数
	
	signed				有符号整数
	
	not null			不能为空
	
	primary key			等同于not null+unique
						主键	不允许为空,而且也不需要重复
	zerofill			填充0
						如果声明了zerofill,该列会自动设为unsigned
	auto_increment		自增
	
	default				默认值
	
	comment				注释
						sqlyog查看
	存储引擎				engine
	
	字符集
	
	unique				唯一性
						允许为null
	foreign keys		外键
---------------------------------------------------------------------------------------------------------------------------------
#示例:zerofill  填充0
如果声明了zerofill,该列会自动设为unsigned
root@sanchuang mysql>create table zhangjie(id int(5) zerofill);
root@sanchuang mysql>desc zhangjie;
+-------+--------------------------+------+-----+---------+-------+
| Field | Type                     | Null | Key | Default | Extra |
+-------+--------------------------+------+-----+---------+-------+
| id    | int(5) unsigned zerofill | YES  |     | NULL    |       |
+-------+--------------------------+------+-----+---------+-------+
1 row in set (0.00 sec)
root@sanchuang mysql>insert into zhangjie(id) values(1),(12),(123);
root@sanchuang mysql>select * from zhangjie;
+-------+
| id    |
+-------+
| 00001 |
| 00012 |
| 00123 |
+-------+
3 rows in set (0.00 sec)

---------------------------------------------------------------------------------------------------------------------------------
#示例:auto_increment 自增
int不指定长度 默认长度是11 有符号,放10位
root@sanchuang mysql>create table city_name(id int unsigned auto_increment primary key,name varchar(20) not null);
root@sanchuang mysql>desc city_name;
+-------+------------------+------+-----+---------+----------------+
| Field | Type             | Null | Key | Default | Extra          |
+-------+------------------+------+-----+---------+----------------+
| id    | int(10) unsigned | NO   | PRI | NULL    | auto_increment |
| name  | varchar(20)      | NO   |     | NULL    |                |
+-------+------------------+------+-----+---------+----------------+
2 rows in set (0.00 sec)
root@sanchuang mysql>create table city_name2(id int auto_increment primary key,name varchar(20) not null);
root@sanchuang mysql>desc city_name2;				#注:int不指定长度 默认长度是11,放10位
+-------+-------------+------+-----+---------+----------------+
| Field | Type        | Null | Key | Default | Extra          |
+-------+-------------+------+-----+---------+----------------+
| id    | int(11)     | NO   | PRI | NULL    | auto_increment |
| name  | varchar(20) | NO   |     | NULL    |                |
+-------+-------------+------+-----+---------+----------------+
2 rows in set (0.00 sec)

#注:存放电话号码 字段使用 字符串类型 varchar;不能用int类型
root@sanchuang mysql>create table city_name4(id int(20) auto_increment primary key,name varchar(20) not null);
root@sanchuang mysql>insert into city_name4(id,name) values(1,'cali');
root@sanchuang mysql>insert into city_name4(name) values('tom');
root@sanchuang mysql>insert into city_name4(name) values('jack');
root@sanchuang mysql>select * from city_name4;
+----+------+
| id | name |
+----+------+
|  1 | cali |
|  2 | tom  |
|  3 | jack |
+----+------+
3 rows in set (0.00 sec)

---------------------------------------------------------------------------------------------------------------------------------
#示例:设置起始值 每次加几
root@sanchuang mysql>SET @@auto_increment_offset = 10,  -- 起始值
    -> @@auto_increment_increment=10;  -- 每次加几

---------------------------------------------------------------------------------------------------------------------------------
#示例:定义变量
root@sanchuang mysql>set @sg='dengjizhou';			#注:定义变量sg赋值dengjizhou
root@sanchuang mysql>insert into city_name4(name) values(@sg);	#注:引用sg的值插入到表里

---------------------------------------------------------------------------------------------------------------------------------
#示例:primary key 主键不允许重复
root@sanchuang mysql>insert into city_name4(id,name) values(7,'rose');
ERROR 1062 (23000): Duplicate entry '7' for key 'PRIMARY'

Duplicate 重复的
entry 条目(记录) --> 一行数据就是一个条目,也是一个记录

---------------------------------------------------------------------------------------------------------------------------------
#示例:default 默认值
列一旦定义了默认值,当插入一个新行到表中并且没有给该列明确赋值时,它将自动得到默认值
root@sanchuang mysql>create table stu1(id int primary key auto_increment,
    -> name varchar(10) not null,
    -> grade int(3) unsigned default 0
    -> );
root@sanchuang mysql>insert into stu1(name,grade) values('cali',80);
root@sanchuang mysql>insert into stu1(name) values('dengjizhou');

---------------------------------------------------------------------------------------------------------------------------------
#示例:comment 注释
comment 用来给列/表 添加注释。最多255个字符。注释会保存到数据字典中
#示例:给列加注释
root@sanchuang mysql>create table stu2(id int primary key comment '编号',name varchar(20) not null comment '姓名');
#示例:给表加注释
root@sanchuang mysql>create table mycomm(
    -> column_a int
    -> ) comment '测试表';

#注:desc stu2;看不到comment 内动;show create table stu2;可以看见使用的语句
#注:select查询时也看不到啊comment

---------------------------------------------------------------------------------------------------------------------------------
#示例:unique 唯一性
root@sanchuang mysql>create table cPen3(id int(4) primary key,name varchar(10) unique);
root@sanchuang mysql>desc cPen3;
+-------+-------------+------+-----+---------+-------+
| Field | Type        | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| id    | int(4)      | NO   | PRI | NULL    |       |
| name  | varchar(10) | YES  | UNI | NULL    |       |
+-------+-------------+------+-----+---------+-------+
2 rows in set (0.00 sec)

唯一性约束的可以有多个null值

索引:是一种数据,用来帮助查询,提升查询的速度。
	主键索引
	唯一索引

示例:foreign key 外键

外键的优势是什么? --> 作用是什么?
外键的好处:直接引用别的表里的字段,自己的表里就不需要再创建相同的数据了,可以避免数据的冗余

父子表:外键所在的表叫做子表,外键所引用的主键所在的表叫做父表

外键:其实在另外表里是主键
	A表里的主键被引用到B表里做一个字段,这个字段就是B表里的外键
---------------------------------------------------------------------------------------------------------------------------------
#示例:foreign key  外键
创建父表  部门表
CREATE TABLE dept(
  deptid INTEGER,
  dname VARCHAR(20),
  CONSTRAINT dept_deptid_pk PRIMARY KEY(deptid) 
);

INSERT INTO dept(deptid,dname) VALUES(10,'市场部');
INSERT INTO dept(deptid,dname) VALUES(20,'销售部');

----------------------------------------------------------------------------
创建子表  员工表
CREATE TABLE emp(
  id INTEGER,
  NAME VARCHAR(20),
  deptid INTEGER,
  PRIMARY KEY(id), 
  FOREIGN KEY(deptid) REFERENCES dept(deptid)
);

INSERT INTO emp(id,NAME,deptid) VALUES(1,'张三',10);  
INSERT INTO emp(id,NAME,deptid) VALUES(2,'李四',10); 

----------------------------------------------------------------------------
外键查询
root@chenpeng4 mysql>select name,dname from dept,emp where dept.deptid = emp.deptid;
+--------+-----------+
| name   | dname     |
+--------+-----------+
| 张三   | 市场部    |
| 李四   | 市场部    |
| 王五   | dev       |
+--------+-----------+
#注:一旦建立主外键后,主表和子表 都受到约束
#注:插入受外键约束
root@chenpeng2 mysql>INSERT INTO emp(id,NAME,deptid) VALUES(3,'李五',30);
ERROR 1452 (23000): Cannot add or update a child row: a foreign key constraint fails 
#注:删除受外键约束
root@chenpeng2 mysql>DELETE FROM dept WHERE deptid = 10;
ERROR 1451 (23000): Cannot delete or update a parent row: a foreign key constraint fails 
ON DELETE CASCADE	级联删除。当删除当删除父表中的行时,如果子表中有依赖于被删除父行的子行存在,那么连同子行一起删除
ON DELETE SET NULL	当删除当删除父表中的行时,如果子表中有依赖于被删除父行的子行存在,那么不删除中,而是将子行的外键列设置为null
CREATE TABLE emp(
  id INTEGER,
  NAME VARCHAR(20),
  deptid INTEGER,
  CONSTRAINT emp_id_pk PRIMARY KEY(id), 
  CONSTRAINT emp_deptid_fk FOREIGN KEY(deptid) REFERENCES dept(deptid)
  ON DELETE SET NULL
);
information_schema:相当于是mysql里的统计局(中央情报局) --> 里面存放的是MySQL运行起来后内部的可以查询的数据 --> MySQL内部管理需要的信息

information_schema.TABLE_CONSTRAINTS --> 存放数据字典的库 --> 对mysql进程的正常运转提供依据。
#示例:2种设置主键方法
1 .primary key直接放到后面作为属性
2 .使用函数primary key()
root@sanchuang mysql>create table stu2(id int primary key comment '编号',name varchar(20) not null comment '姓名');
root@sanchuang mysql>create table stu3(id int comment '编号',name varchar(20) not null comment '姓名',primary key(id));

存储引擎

什么是存储引擎?
	mysql里用来存取数据的一个模块,负责将mysql在内存里的数据写到磁盘,同时也负责将磁盘的里数据读取到内存。

有哪些存储引擎?
InnoDB  MyISAM  MEMORY  BLACKHOLE  CSV

存储引擎和表绑定
memory	数据保存在内存里,特别适用于适用临时表的场景
csv		CSV storage engine  
		以逗号作为分割的文件
		数据分析  数据处理
blackhole
		解决了主从复制架构里,让很多的从服务器直接到配置了blackhole存储引擎的master上拿二进制日志,让最上层的master的负载降低
		其实就是帮忙主从架构传递二进制日志,自己不执行二进制日志,只是传递

#注:MEMORY存储引擎的特点:尽可能把数据保存到内存当中,不写在内存里。特别适用于临时表。方向:大数据分析、统计;临时使用表,只需要结果
#示例:创建临时表
root@sanchuang 13:19  mysql>create temporary table chenpeng(id int);
root@sanchuang 13:20  mysql>insert into chenpeng(id) values(1);
#注:show tables;查看不了。其他用户登录 查看不到。每个人连过来会产生一个会话,操作时产生一堆事务,事务隔离,落盘到磁盘。临时表只在内存中,不落盘,不持久化(内存到磁盘,不丢失)
blackhole存储引擎 适用场景

	在主从之间添加一个分布式master,配置blackhole存储引擎,他起到一个中继的作用,他接收数据但丢其他而不是存储,只是会把master的二进制日志供下层的slave来读取。
blackhole存储引擎的特点:
	解决了主从复制架构里,让很多的从服务器直接到配置了blackhole存储引擎的master上拿二进制日志,让最上层的master的负载降低
	其实就是帮忙主从架构传递二进制日志,自己不执行二进制日志,只是传递
Supports transactions, row-level locking, and foreign keys
InnoDB特点:
	事务:transactions
	行锁:row-level locking 给表里的一行数据加锁
	外键:foreign keys

#注:事务 解决大并发情况下数据不乱的问题
memory存储引擎	数据保存在内存里,特别适用于适用临时表的场景
csv存储引擎
	CSV storage engine  
	以逗号作为分割的文件
	数据分析  数据处理
[root@mysql_compile log]# cat /etc/passwd|awk -F: 'BEGIN{OFS=",";print "username,uid,gid,shell"}{print $1,$3,$4,$7}' >user.csv
[root@mysql_compile log]# cat user.csv 
username,uid,gid,shell
root,0,0,/bin/bash
bin,1,1,/sbin/nologin

BEGIN{命令}		是awk命令首先执行的命令,而且只是执行一次
OFS=","		指定输出分隔符,默认是空格
;			命令连接符号
BEGIN{命令}		最后执行
print "username,uid,gid,shell"	输出字符串
show create table stu2; 可以查看使用哪种存储引擎
show engines; 			查看有哪些存储引擎 和 默认使用的存储引擎

字符集

示例:建表时指定字符集
root@sanchuang mysql>create table t11(id int(10) primary key auto_increment,name varchar(20) not null default 'jack') default charset='utf8';
示例:建库时指定字符集
root@(none) mysql>create databases cPen2 default charset='utf8';
root@(none) mysql>show create database cPen2;
utf8编码:
	1个英文字母占1个字节
	1个汉字占3个字节
字符集会继承
	库 --> 表 --> 字段
	创建表的时候,varchar和char、text文本的数据类型 --> 可以去指定列的字段类型
	列对应的字段的字符集优先级最高

rpm方式安装的mysql默认的字符集是latin1
编译安装的时候因为指定了字符集为utf8,所以默认的字符集是utf8
	COLLATION 校对规则、排序规则
	utf8_general_ci  case ignore --> 排序的时候,不区分大小写
---------------------------------------------------------------------------------------------------------------------------------
#示例:查看mysql里支持哪些字符集
root@sanchuang mysql>show character set;
#示例:查看当前正在用哪些字符集
root@sanchuang mysql>show variables like '%char%';

---------------------------------------------------------------------------------------------------------------------------------
#示例:length(),char_length()
root@sanchuang mysql>select name,length(name),char_length(name) from t8;

length(name)统计字符串的存储的字节数
char_length(name)统计的是字符的个数
字符集会继承
	库 --> 表 --> 字段
#示例:知道表的字符集
root@sanchuang mysql>show create table stu_info;
#示例:知道库的字符集
root@(none) mysql>show create database cPen;
+----------+-----------------------------------------------------------------+
| Database | Create Database                                                 |
+----------+-----------------------------------------------------------------+
| cPen     | CREATE DATABASE `cPen` /*!40100 DEFAULT CHARACTER SET latin1 */ |
+----------+-----------------------------------------------------------------+
1 row in set (0.19 sec)
#示例:查看mysql版本
[root@mysql_rpm ~]# mysql -V

创建新表

如何根据一个已经存在的表去创建一个新的表,表结构和数据都一模一样?

语法1CREATE TABLE new_tbl LIKE orig_tbl; 
这种语法,将从源表复制列名、数据类型、大小、非空约束以及索引。而表的内容以及其它约束不会复制,新表是一张空表。
例:
CREATE TABLE copy_teams LIKE teams;

语法2CREATE TABLE new_tbl [AS] SELECT {*|column,...} FROM orig_tbl; 
新表的结构由select列表决定。同时把查询返回的结果集中的行插入到目标表中。这种语法同样只能把非空约束带入到新表中。也不会复制索引 (主键、外键等)
例:
CREATE  TABLE copy_teams2 
   AS  SELECT * FROM teams;
#示例:根据已有的表来创建新表
root@chenpeng4 mysql>create table new_student like student;
root@chenpeng4 mysql>create table student2 as select * from student;
#示例:创建teams表的一个临时副本,并且给这个表分配相同的名字
root@chenpeng4 mysql>create temporary table teams
    -> as select * from teams;
好处:临时使用,用户一断开连接,临时表的空间就会释放
#示例:去掉表中重复数据 (去重) --> 赋给新的临时表
root@chenpeng4 mysql>select distinct * from student2;
root@chenpeng4 mysql>create temporary table temp_student as select distinct * from student2;

数据库建模

设计数据模型

===============================================================================
原方案

===============================================================================
选课系统

学号    名字    班级    课程编号    名字    讲师    教室    学分    成绩
1	李三	某学院某专业某届几班	1		云计算	***		***		4
1	李三	某学院某专业某届几班	2		***		***		***		*
1	李三	***

名字、班级  大量重复数据
计算机与科学专业  计科专业  会选错  数据不统一
手机号  同个同学填多个

---------------------------------------------------------------------------------------------------------------------------------
问题
1 .大量的重复数据
2 .数据不统一

---------------------------------------------------------------------------------------------------------------------------------
问题
1 .统计一下计科专业选课情况 (有人填计算机用于计算科学)
2 .手机号码修改
3 .查看成绩,很多数据被迫看

===============================================================================
数据库系统最核心的保证
	数据的一致性
===============================================================================
第二种方案

===============================================================================
表 -- 学生信息
学号    手机号
李三

---------------------------------------------------------------------------------------------------------------------------------
表 -- 课程信息
课程编号

---------------------------------------------------------------------------------------------------------------------------------
表 -- 讲师

---------------------------------------------------------------------------------------------------------------------------------
表 -- 教室
教室编号

---------------------------------------------------------------------------------------------------------------------------------
表 -- 专业

---------------------------------------------------------------------------------------------------------------------------------
表 -- 选课表
专业编号列    学号列    课程编号列    讲师编号列    教室编号    成绩

===============================================================================
使用第二种方案来设计一套系统,满足范式

假设不满足范式:数据冗余、表格很庞大(列非常多)

选课表
学生信息  课程信息  讲师  成绩

多个列来表示对象 --> 学生、课程、讲师 --> 把学生、课程、讲师 单独拿出来,建表

---------------------------------------------------------------------------------------------------------------------------------
学生表  专业表  教室表  课程表  讲师表  成绩表

---------------------------------------------------------------------------------------------------------------------------------
学生表

学号  名字  手机号  家庭住址  班级

家庭住址表 --> 一堆表 --> 多个列 (考虑业务需求)
	省、市、县、乡镇、村
	不拆的情况:山东省济南市什么区什么路  山东济南什么路 --> 地址准确,但是统计时是2个地方;系统拆出来很多  不便于将来统计
	如果将来没有统计的需求,那么可以不拆
	如果有统计的需求,需要拆
		--> 省  市  地址(不细分、考虑业务需求)

	班级 --> 单独拿一张表
		学校  学院  届  班

以上是设计数据模型

PowerDesigner 建模工具

===============================================================================
步骤:create model -->

步骤:Categories --> Information --> Conceptual Data (概念数据) --> Model name:*** -->
	即选择cdm

步骤:工作空间 --> 选课系统 --> Diagram_1 -->
	Entity --> 拉过来

===============================================================================
entity
	实体,一个实体就是一个表格、一个表

---------------------------------------------------------------------------------------------------------------------------------
表格
	1 .表格名字
	2 .---------------------------------------------------------------------------------------------------------------------------------
设计标准
	1 .每一个表都有一个主键
	2 .列值尽量不要为空
---------------------------------------------------------------------------------------------------------------------------------
学生信息

选课

	学生信息  课程信息  讲师信息

步骤:Relationship(右边工具栏) --> 拖过来 1连3  3拖1 (效果:选课里 有3个信息)

---------------------------------------------------------------------------------------------------------------------------------
步骤:双击选课 --> Attributes
	--> Name:成绩  Num  5  2

---------------------------------------------------------------------------------------------------------------------------------
步骤:双击学生信息 --> Attributes
	--> Name:学号  Num  10  P (唯一标识列 primary key) --> 每一个学号代表一个学生
	--> Name:名字  Varchar  20  M (必填、不能为空)
	--> Name:性别  Varchar  1   M
	--> Name:手机号码  Num 10  M
	--> Name:专业  看是否有统计需求,判断是否有

---------------------------------------------------------------------------------------------------------------------------------
步骤:添加entity  专业信息
	--> Relationship 连过来 --> 学生信息
		效果:学生信息里就有专业信息了

步骤:添加entity  省份信息
	--> 同上Relationship --> 学生信息
步骤:添加entity  地级市信息信息
	--> 同上Relationship --> 学生信息

#注:relationship  A需要有B的信息,B拖到A这边来

---------------------------------------------------------------------------------------------------------------------------------
步骤:双击学生信息 --> Attributes
	--Name:具体地址  Varchar  100  M

===============================================================================
省份信息
步骤:
	省份信息

	省份编号  Num  6  P
	省份名字  Varchar  50  M

---------------------------------------------------------------------------------------------------------------------------------
地级市信息
步骤:
	地级市信息

	地级市编号  Num  6  P
	地级市名字  Varchar  100  M

===============================================================================
专业信息
步骤:
	专业信息

	专业编号  Num  10  P
	专业名字  Varchar  100  M

===============================================================================
课程信息
步骤:
	课程信息
	
	课程编号  Num  10  P
	课程名字  Varchar  100  M

===============================================================================
讲师信息
步骤:
	讲师信息
	
	讲师编号  Num  10  P
	讲师名字  Varchar  100  M
	讲师手机号码  Num  11  M

###############################################################################
步骤:将系统部署到MySQL数据库上
	上面菜单栏 --> 工具 (第2个) --> Generate Physical Data Model
		--> DMS: MySQL 5.0 (选中) --> 确定
	结果:报警  缺少identifiers  enitity’选课’  不管它  --> 生成了

原来的是cdm;生成的新的文件是 pdm

###############################################################################
步骤
	双击 新生成的 Diagram_1 (pdm文件)
	选课 --> Columns -->
		学号、讲师编号、课程编号 P  (3个合起来作为主键) --> 把刚才的警报解决了
			--> 唯一标识:一个学生选某个老师的某门课  只能选一个

###############################################################################
步骤
	上面的菜单栏 数据库 --> Generate Database 选中
		DBMS: MySQL 5.0 --> 确定
			--> 选课.sql脚本 --> edit 里面的内容 是SQL语句
			将来把这些语句往数据库里一跑,表就全出来了 --> 设计完以后 直接可以用

工具好处:设计系统时,不需要考虑建表语句,画图就出来了
	PowerDesigner建模工具

宿舍管理系统

列需求
需求分析 --> 设计

使用者
	1 .宿舍管理员
	2 .学生

功能的分析

宿舍管理员
	1 .学生信息的录入和维护 --> 为了满足这个功能,需要设计那些表格?
		学生信息(数据库方面) ;Java工程师 需要写很多页面:查询、录入、更改
		考虑:为了满足这个功能,只需要在数据库里存什么
	2 .物品信息的录入和维护
		物品信息
	3 .物品的发放
		物品发放登记表
		考虑:为了满足这个功能,只需要在数据库里存什么
	4 .物品的回收
		物品回收登记表
	5 .物品的维修
		物品维修记录表
	6 .卫生检查信息的录入和维护
		卫生检查信息记录表
	7 .值班信息的录入和维护
		值班信息记录表
	8 .宿舍管理员信息的维护和录入 / 宿舍管理员注册、登录
		宿舍管理员信息

计算机系统  是用来办公的,存到数据库里面去 (无纸化办公)

学生
	1 .学生信息的(注册和)登录:用户名就是本人的学号,密码就是身份证最后62 .学生领用物品的查询和申请
	3 .学生报修物品
学校拨款100万 --> 建设宿舍管理系统 (需求) --> 设计者 (程序员)

===============================================================================
	步骤1:买2台服务器 (硬件) --> 装操作系统Linux
		数据库服务器 (database server)
		应用服务器 (application server)
	应用服务器的软件 tomcat  weblogic  jboss  websphere
		tomcat

		应用服务器  	6~10万
		数据库服务器	10~15万

数据库服务器 (database server) Linux --> 装数据库软件 mysql
基础架构搭了

===============================================================================
	步骤2:请2个工程师
		数据库工程师:做好需求分析,使用PowerDesigner设计一套数据库系统,然后部署到MySQL里面去
			本质:建一堆表
		Java工程师:写类似网站的东西 Java代码,程序部署到tomcat上面去
		网络工程师:中间应用服务器和数据库服务器 需要通过网络连接起来。买几台交换机、路由器
===============================================================================
应用服务器
		Java代码
		Tomcat (应用服务器软件 software)
		Linux
		Hardware 硬件

数据库服务器
		表 --> 录入/查询
		Mysql
		Linux
		Hardware

宿舍管理员 --> 通过电脑 打开网站 --> 弹出窗口 注册、登录 --> 登录后 打开页面;小按钮,各种窗口 --> 学生信息录入 --> 提交 --> 录入的学生信息存到表里去 (对数据库的操作:管理员通过应用程序去操作表)
	--> 查询 --> 把数据从表中取出来 --> 通过Java展示

Java工程师的Java代码做的事:
	1 .展现窗口 (提供友好界面) --> 导航作用
	2 .把信息存入数据库
	3 .把信息从数据库里取出
	4 .修改数据库里的表

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

mycpen

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值