数据库设计
来源:互联网 发布:淘宝网天猫女装夏装 编辑:程序博客网 时间:2024/05/16 08:46
数据库设计
目标与目的
学习目标:
- 掌握日常数据库建表操作
- 了解表设计的规范
何为表结构设计:
- 表结构设计需要在正式进行开发之前完成
- 根据产品需求将复杂的业务模型抽象出来
项目分析
实践课程模型:
- 类似电商类的网站
用户:
- 核心业务
- 非核心业务
核心业务:
- 交易相关
- 订单详情,订单
- 商品相关
- 商品类别,商品
非核心业务:
- 物流
- 供应商信息
业务模型转表
用户: tb_account(用户表)
商品类:tb_goods_category(商品类别表) tb_goods(商品详情表)
交易类:tb_order_item(交易订单详情表) tb_order(交易表)
设计表的时候需要注意哪些
- 理解各个表的依赖关系
- 理解各个表的功能特点(字段之间的约束,索引;字段类型,字段长度)
收集表属性
用户表:
自增属性,auto_increment
图片不会直接存在数据库,在数据库中之后存图片的一个url地址,有专门的图片存储系统去存图片
varchar VS text 在存储特别长的字段时
一般从两个方面: 1.性能
2.存储上限
varchar 最大长度65535,如果用utf8及3个字节;
varchar最大为65535/3=21845
65535及2的16次方
网易数据类型-命名规范
- 所有表名,字段名全部使用小写字母
- 不同业务,表名使用不同前缀区分
- 生成环境表名字段名要有实际意义
- 单个字段尽量使用字段全名;多个字段名之间使用下划线分隔
字段设计规范:
- 存储空间(尽量选择能满足应用要求的最小数据类型)
- 前瞻性(尽量使用整型代替字符型)
- 注释,每个字段必须以COMMENT语句给出字段的作用
- 经常访问的大字段(如blob,text)等需要单独放到一张表中,避免降低SQL效率,图片,电影等大文件数据禁止存放数据库
- 新业务统一建议使用utf8mb4字符集(适应苹果手机的imoge表情库)
用户赋权注意:
- 理解用户到底需要什么权限
- 普通用户只有读写权限
- 系统管理员具有super权限
- 权限粒度要做到尽可能的细
- 普通用户不要设置with grant option 属性
- 权限粒度:系统层面>库层面>表层面>字段层面
- 禁止简单密码
- 线上密码要求随机
总结
- 理解个表间依赖关系以及功能特点
- 字段间约束
- 索引的选取
- 字段类型与长度
- 自增主键重要性
- varchar最大长度
- 65535/3=21845
- 实际还要小点
- 前瞻性与注释
- 经常访问的大字段(blob/text)单独存放
- 赋权限
- 权限最小原则
- 普通用户不要设置with grant option 属性
表结构
---- Table structure for table `tb_account`-- DROP TABLE IF EXISTS `tb_account`;/*!40101 SET @saved_cs_client = @@character_set_client */;/*!40101 SET character_set_client = utf8 */;CREATE TABLE `tb_account` ( `account_id` int(11) NOT NULL AUTO_INCREMENT, `nick_name` varchar(20) DEFAULT NULL, `true_name` varchar(20) DEFAULT NULL, `sex` char(1) DEFAULT NULL, `mail_address` varchar(50) DEFAULT NULL, `phone1` varchar(20) NOT NULL, `phone2` varchar(20) DEFAULT NULL, `password` varchar(30) NOT NULL, `create_time` datetime DEFAULT NULL, `account_state` tinyint(4) DEFAULT NULL, `last_login_time` datetime DEFAULT NULL, `last_login_ip` varchar(20) DEFAULT NULL, PRIMARY KEY (`account_id`)) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;/*!40101 SET character_set_client = @saved_cs_client */; ---- Table structure for table `tb_goods`-- DROP TABLE IF EXISTS `tb_goods`;/*!40101 SET @saved_cs_client = @@character_set_client */;/*!40101 SET character_set_client = utf8 */;CREATE TABLE `tb_goods` ( `goods_id` bigint(20) NOT NULL AUTO_INCREMENT, `goods_name` varchar(100) NOT NULL, `pic_url` varchar(500) NOT NULL, `store_quantity` int(11) NOT NULL, `goods_note` varchar(800) DEFAULT NULL, `producer` varchar(500) DEFAULT NULL, `category_id` int(11) NOT NULL, PRIMARY KEY (`goods_id`)) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;/*!40101 SET character_set_client = @saved_cs_client */; ---- Table structure for table `tb_goods_category`-- DROP TABLE IF EXISTS `tb_goods_category`;/*!40101 SET @saved_cs_client = @@character_set_client */;/*!40101 SET character_set_client = utf8 */;CREATE TABLE `tb_goods_category` ( `category_id` int(11) NOT NULL AUTO_INCREMENT, `category_level` smallint(6) NOT NULL, `category_name` varchar(500) DEFAULT NULL, `upper_category_id` int(11) NOT NULL, PRIMARY KEY (`category_id`)) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;/*!40101 SET character_set_client = @saved_cs_client */; ---- Table structure for table `tb_order`-- DROP TABLE IF EXISTS `tb_order`;/*!40101 SET @saved_cs_client = @@character_set_client */;/*!40101 SET character_set_client = utf8 */;CREATE TABLE `tb_order` ( `order_id` bigint(20) NOT NULL AUTO_INCREMENT, `account_id` int(11) NOT NULL, `create_time` datetime DEFAULT NULL, `order_amount` decimal(12,2) DEFAULT NULL, `order_state` tinyint(4) DEFAULT NULL, `update_time` datetime DEFAULT NULL, `order_ip` varchar(20) DEFAULT NULL, `pay_method` varchar(20) DEFAULT NULL, `user_notes` varchar(500) DEFAULT NULL, PRIMARY KEY (`order_id`)) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;/*!40101 SET character_set_client = @saved_cs_client */; ---- Table structure for table `tb_order_item`-- DROP TABLE IF EXISTS `tb_order_item`;/*!40101 SET @saved_cs_client = @@character_set_client */;/*!40101 SET character_set_client = utf8 */;CREATE TABLE `tb_order_item` ( `order_item_id` bigint(20) NOT NULL AUTO_INCREMENT, `order_id` bigint(20) NOT NULL, `goods_id` bigint(20) NOT NULL, `goods_quantity` int(11) NOT NULL, `goods_amount` decimal(12,2) DEFAULT NULL, PRIMARY KEY (`order_item_id`), UNIQUE KEY `uk_order_goods` (`order_id`,`goods_id`)) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;/*!40101 SET character_set_client = @saved_cs_client */;/*!40103 SET TIME_ZONE=@OLD_TIME_ZONE */;
0 0
- 数据库设计
- 数据库设计
- 数据库设计
- 数据库设计
- 数据库设计
- 数据库设计
- 数据库设计
- 数据库设计
- 数据库设计
- 数据库设计
- 数据库设计
- 数据库设计
- 数据库设计
- 数据库设计
- 数据库设计
- 数据库设计
- 数据库设计
- 数据库设计
- mysql分区常见操作
- Linux重置网卡名
- 并发编程-Java内存模型
- 如何用SQL对MaxCompute数据进行修改和删除
- Mybatis在mapper接口上使用注解报反射异常
- 数据库设计
- 作业(Git)
- visual assist 一直使用试用版的方法
- vue.js 微信浏览器不支持lambda表达式
- ROC曲线详解及matlab绘图实例
- opencv矩阵操作
- Java 8新的时间日期库的20个使用示例
- 从IaaS到AI,马云为何让阿里云去扛人工智能大旗?
- linux中重置服务器的mysql用户密码 及 导入sql文件