Mysql基础:设计一个项目数据库,三大范式
设计项目数据库的步骤:(eg:个人博客)
1.收集信息,分析需求
。用户表(用户登陆注销,用户的个人信息,写博客,创建分类)
。分类表(文章分类,谁创建的)
。文章表(文章的信息)
。评论表
。友链表(友链信息)
。粉丝(关注)表
。自定义表(系统信息,某个关键的字。或者一些主字段) key:value
标识实体(把需求落到每个字段)
标识实体之间的关系
。写博客:user-->blog
、 。创建分类:user-->category
。关注:user-->user
。友链:links
。评论:user->user>blog
-- =========user表 ======== DROP TABLE IF EXISTS `user`; CREATE TABLE `user` ( `id` int(10) NOT NULL AUTO_INCREMENT COMMENT '用户唯一id', `username` varchar(60) NOT NULL COMMENT '用户名', `password` varchar(60) NOT NULL COMMENT '用户密码', `sex` varchar(2) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL COMMENT '性别', `age` int(3) DEFAULT NULL COMMENT '年龄', `sign` varchar(200) DEFAULT NULL COMMENT '签名', `open_id` varchar(1000) NOT NULL COMMENT '微信id', `avatar` varchar(1000) NOT NULL COMMENT '头像链接地址', PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8; -- =========分类r表 ======== CREATE TABLE `category` ( `id` int(10) NOT NULL COMMENT '分类iid', `category_name` varchar(30) NOT NULL COMMENT '分类标题', `create_user_id` int(10) NOT NULL COMMENT '创建用户的id', PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8; -- =========文章表 ======== CREATE TABLE `blog` ( `id` int(10) NOT NULL COMMENT '文章的唯一标识', `title` varchar(100) NOT NULL COMMENT '文章标题', `author_id` int(10) NOT NULL COMMENT '编写文章的用户', `category_id` int(10) NOT NULL COMMENT '文章的分类id', `content` text NOT NULL COMMENT '文章内容', `create_time` datetime DEFAULT NULL COMMENT '创建时间', `update_time` datetime DEFAULT NULL COMMENT '修改时间', `love` int(10) DEFAULT NULL COMMENT '喜欢', PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8; -- =========评论表 ======== CREATE TABLE `comment` ( `id` int(10) NOT NULL COMMENT '评论id', `blog_id` int(10) NOT NULL COMMENT '所属文章', `user_id` int(10) NOT NULL COMMENT '评论人', `content` varchar(2000) NOT NULL COMMENT '评论的内容', `create_time` datetime NOT NULL COMMENT '评论时间', `user_id_parent` int(10) NOT NULL COMMENT '回复的人的id', PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8; -- =========友链表 ======== CREATE TABLE `links` ( `id` int(10) NOT NULL COMMENT '友链id', `links` varchar(60) NOT NULL COMMENT '网站名称', `href` varchar(2000) NOT NULL COMMENT '网站链接', `sort` int(10) NOT NULL COMMENT '排序', PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8; -- =========user_follow表 ======== DROP TABLE IF EXISTS `user_follow`; CREATE TABLE `user_follow` ( `id` int(10) NOT NULL COMMENT '唯一标识', `user_id` int(10) NOT NULL COMMENT '被关注人的id', `follow_id` int(10) NOT NULL COMMENT '关注人的id', PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
**ant.design.pro
**数据库经典例子:BBS(论坛) CRM(客户管理系统)
三大范式
第一范式(1NF)
原子性:保证每一列不可再分
第二范式(2NF)
前提:满足第一范式
每张表只能描述一件事
第三范式(3NF)
前提:满足第一范式和第二范式
第三范式需要确保数据表中的每一列数据都和主键直接相关,而不是间接相关