1.熟悉QQZone业务需求

1)用户登录

2)登录成功,显示主界面,左侧显示好友列表;上端显示欢迎词;如果不是自己的空间,显示超链接,返回自己的空间;下端显示日志列表

3)查看日志详情:

  • 日志本身的信息(作者的头像、昵称、日志标题、日志内容、日志的日期)
  • 回复列表(回复者的头像、昵称、回复内容、回复日期)
  • 主人回复信息

4)删除日志

5)删除特定回复

6)删除特定主人回复

7)添加日志、添加回复、添加主人回复

8)点击左侧好友列表,进入好友空间

2.数据库设计

1)抽取实体

  • 用户
  • 用户登录信息
  • 用户详情信息
  • 日志
  • 回帖
  • 主人回复

2)分析其中的属性

  • 用户登录信息:账号、密码、头像、昵称
  • 用户详情信息:真实姓名、星座、血型、邮箱、手机号
  • 日志:标题、内容、日期、作者
  • 回复:内容、日期、作者、日志
  • 主人回复:内容、日期、作者、回复

3)分析实体之间的关系

  • 用户登录信息 :用户详情信息 1:1(PK主键的一对一)
  • 用户 :日志 1 :N
  • 日志 :回复 1 :N
  • 回复 :主人回复 1 :1(UK唯一外键的一对一)
  • 用户 : 好友 M :N

javafx集成小数据库 java带数据库的小项目_数据库

3.数据库的范式:

1)第一范式:列不可再分

2)第二范式:一张表只表达一层含义(只描述一件事情)

3)第三范式:表中的每一列和主键都是直接依赖关系,而不是间接依赖

4.数据库设计的范式和数据库的查询性能很多时候是相悖的,我们需要根据实际的业务情况做选择。

  • 查询频次不高的情况下,更倾向于提高数据库的设计范式,从而提高存储效率。
  • 查询频次较高的情况下,更倾向于牺牲数据库的规范度,降低数据库设计的范式,允许特定的冗余,从而提高查询的性能。

4.数据库设计的sql语句

SET FOREIGN_KEY_CHECKS=0;

-- ----------------------------
-- Table structure for t_friend
-- ----------------------------
DROP TABLE IF EXISTS `t_friend`;
CREATE TABLE `t_friend` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `uid` int(11) DEFAULT NULL,
  `fid` int(11) DEFAULT NULL,
  PRIMARY KEY (`id`),
  KEY `FK_friend_basic_uid` (`uid`),
  KEY `FK_friend_basic_fid` (`fid`),
  CONSTRAINT `FK_friend_basic_fid` FOREIGN KEY (`fid`) REFERENCES `t_user_basic` (`id`),
  CONSTRAINT `FK_friend_basic_uid` FOREIGN KEY (`uid`) REFERENCES `t_user_basic` (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=11 DEFAULT CHARSET=utf8;

-- ----------------------------
-- Table structure for t_host_reply
-- ----------------------------
DROP TABLE IF EXISTS `t_host_reply`;
CREATE TABLE `t_host_reply` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `content` varchar(500) NOT NULL,
  `hostReplyDate` datetime NOT NULL,
  `author` int(11) NOT NULL,
  `reply` int(11) NOT NULL,
  PRIMARY KEY (`id`),
  KEY `FK_host_basic` (`author`),
  KEY `FK_host_reply` (`reply`),
  CONSTRAINT `FK_host_basic` FOREIGN KEY (`author`) REFERENCES `t_user_basic` (`id`),
  CONSTRAINT `FK_host_reply` FOREIGN KEY (`reply`) REFERENCES `t_reply` (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=8 DEFAULT CHARSET=utf8;

-- ----------------------------
-- Table structure for t_reply
-- ----------------------------
DROP TABLE IF EXISTS `t_reply`;
CREATE TABLE `t_reply` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `content` varchar(500) NOT NULL,
  `replyDate` datetime NOT NULL,
  `author` int(11) NOT NULL,
  `topic` int(11) NOT NULL,
  PRIMARY KEY (`id`),
  KEY `FK_reply_basic` (`author`),
  KEY `FK_reply_topic` (`topic`),
  CONSTRAINT `FK_reply_basic` FOREIGN KEY (`author`) REFERENCES `t_user_basic` (`id`),
  CONSTRAINT `FK_reply_topic` FOREIGN KEY (`topic`) REFERENCES `t_topic` (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=12 DEFAULT CHARSET=utf8;

-- ----------------------------
-- Table structure for t_topic
-- ----------------------------
DROP TABLE IF EXISTS `t_topic`;
CREATE TABLE `t_topic` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `title` varchar(100) NOT NULL,
  `content` varchar(500) NOT NULL,
  `topicDate` datetime NOT NULL,
  `author` int(11) NOT NULL,
  PRIMARY KEY (`id`),
  KEY `FK_topic_basic` (`author`),
  CONSTRAINT `FK_topic_basic` FOREIGN KEY (`author`) REFERENCES `t_user_basic` (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=12 DEFAULT CHARSET=utf8;

-- ----------------------------
-- Table structure for t_user_basic
-- ----------------------------
DROP TABLE IF EXISTS `t_user_basic`;
CREATE TABLE `t_user_basic` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `loginId` varchar(20) NOT NULL,
  `nickName` varchar(50) NOT NULL,
  `pwd` varchar(20) NOT NULL,
  `headImg` varchar(20) DEFAULT NULL,
  PRIMARY KEY (`id`),
  UNIQUE KEY `loginId` (`loginId`)
) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=utf8;

-- ----------------------------
-- Table structure for t_user_detail
-- ----------------------------
DROP TABLE IF EXISTS `t_user_detail`;
CREATE TABLE `t_user_detail` (
  `id` int(11) NOT NULL,
  `realName` varchar(20) DEFAULT NULL,
  `tel` varchar(11) DEFAULT NULL,
  `email` varchar(30) DEFAULT NULL,
  `birth` datetime DEFAULT NULL,
  `star` varchar(10) DEFAULT NULL,
  PRIMARY KEY (`id`),
  CONSTRAINT `FK_detail_basic` FOREIGN KEY (`id`) REFERENCES `t_user_basic` (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;