项目总结之项目中怎样根据关系建立表

怎么设计vfp数据库与表之间的关系 <br />具体来说,VFP是Visual FoxPro<br />他是一种数据库<br /> 一、 VISUAL FOXPRO基础知识 <br />  1、 基本概念 <br />  数据库、数据模型、数据库管理系统、类和对象、事件、方法。 <br />  2、 关系数据库: <br />  (1) 关系数据库:关系模型、关系模式、关系、元组、属性、域、主关键字和外部关 <br />  键字。 <br />  (2) 关系运算:选择、投影、联接。 <br />  (3) 数据的一致性和完整性:实体完整性、 阅读详情

在做完一个springboot的个人博客项目,想总结下从数据库建表到完成的对自己有点价值的点,包括碰到的问题及解决过程和方法,希望读者也能找到自己想要的。这篇博客主要是讲解建表的过程。

我在这个项目中建表的方式可能与平常的习惯不太一样(可能来自于学JPA后的后遗症吧,不过JPA不需要自己建表,Mybatis需要自己建表,转技术时就得会建表)。

先建立实体类

实体类有博客类,评论类,类别类,标签类,用户类。
主要以博客类为主体,
对应关系:

  • 博客与评论是一对多
  • 博客与类别是多对一
  • 博客与标签是多对多
  • 博客与用户是多对一即多个博客对应一个用户,一个用户下有多个博客
  • 还有一个关系是评论中有子评论和父评论,父评论与子评论是一对多的

根据这些关系建立实体类(自行忽略getset及构造方法,这里主要看字段):
博客类:

package com.yuer.entity;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;

public class Blog implements Serializable {

	
	private static final long serialVersionUID = 1L;
	
	private Long id;
	private String title; // 博客标题
	private String firstPicture; // 首图
	private String content; // 内容
	private String flag;
	private Integer viewCounts; // 游览次数
	private Boolean isAppreciate; // 是否开启赞赏
	private Boolean isOpenCopyright; // 是否开启装载声明
	private Boolean isComment; // 是否开启评论
	private Boolean isPublished; // 是否发布
	private Boolean isRecommend; // 是否推荐

	private Date createTime; // 创建时间
	private Date updateTime; // 更新时间

	private User user;
	private List<Tag> tags = new ArrayList<>();
	private Type type;
	private List<Comment> comments = new ArrayList<>();

	private String tagIds;

	// 描述
	private String description;

	// 为方便展示,忽略getset及空构造

}

评论类:

package com.yuer.entity;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;


public class Comment implements Serializable {
	
	
	
	private static final long serialVersionUID = 1L;
	private Long id;
	private String nickName; // 昵称
	private String headPicture; // 头像
	private String email; // 邮箱
	private String content; // 评论内容
	

	private Date createTime; // 创建时间
	
	private Blog blog;
	
	private Comment parent;
	
	private List<Comment> comments = new ArrayList<Comment>();
	
	// 是否是博主产生的评论
	private boolean adminComment;
	
	
	
	
	

}

类别类:

package com.yuer.entity;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;


public class Type implements Serializable {
	
	private static final long serialVersionUID = 1L;
	private Long id;
	private String typeName; // 类别名
	
	private List<Blog> blogs = new ArrayList<Blog>();
	
	private Integer blogNum = 0;
	
	
	
	
	

}

标签类:

package com.yuer.entity;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;


public class Tag implements Serializable {

	
	private static final long serialVersionUID = 1L;
	private Long id;
	private String tagName; // 标签名
	
	private List<Blog> blogs = new ArrayList<>();
	
	private Integer blogNum = 0;
	
	
	
	
	
}

用户类:

package com.yuer.entity;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;


public class User implements Serializable {

	
	private static final long serialVersionUID = 1L;
	private Long id;
	private String userName; // 用户名
	private String nickName; // 昵称
	private String password; // 密码
	private String email; // 邮箱
	private Integer type; // 留待以后扩展,默认为0,管理员
	private String headImage; // 头像
	
	private Date createTime; // 创建时间
	private Date updateTime; // 更新时间
	
	private List<Blog> blogs = new ArrayList<>();
	
	
	
	
	
	
	
	
}

看完这些类中的字段,你应该会发现,一对多,如博客下有多个评论,则博客类中会有个list集合放置comment,而评论类中会直接声明一个博客类的对象。如果是多对一,如多个博客属于一个用户,则博客类中会声明一个用户类的对象,而用户类中有个博客类的list集合。如果是多对多,如一个博客有多个标签,,一个标签有多个博客,则两个类中分别由对方的list集合。
总结:哪方属于多,哪方只需要声明对方的一个对象。哪方属于一,则哪方会声明对方的list集合。

数据库中建表

建表时对应实体类建,不过对于这些关系而言,则是外键的引用,有个特殊的表还得另外建,对于多对多关系的表,得单独建一个表处理多对多的关系。
看如下数据库表设计:

在这里插入图片描述
除了博客和标签的关系需要另建一个表来维护以外,其他关系,如一对多,则多的那一端(那个表)会声明一的那个表的id的一个字段,如下图:
博客表:
在这里插入图片描述(这里另插一句话,建表时id字段尽量使用自增,还有对于存储很多内容的字段如博客的正文需要声明成longtext,而用来存储boolean值的可以声明为bit,这个类型只存储0或1)
这张图中对于类别和用户就分别声明了一个字段进行外键关联,方便查数据。

接下来看看其他表吧:
评论表:
在这里插入图片描述类别表:
在这里插入图片描述
标签表:
在这里插入图片描述
用户表:
在这里插入图片描述
多对多关系维护表:
在这里插入图片描述这个可能不太好理解,通过我已经添加的数据进行理解:
在这里插入图片描述

总结

根据这些图片和实体类进行理解,对于这种简单的关系建表自然就再也不是问题了,博主特此记录一下。

多表的设计原理,如何设计表与表之间的关系 在开发中,一个项目的数据,会保存在一个数据库中,但是不同的数据保存在不同的表中,不同的表,表与表之间有不同的关系。 有,一对多的对应关系、一对多(多对一)、一对一。 1、外键约束是什么、有什么作用 外键约束:一个表a, a c 引入另一张表b的b c的字段,那么可以把a表中的a c 字段设置成外键约束。 建表之后添加外键约束: ... 阅读详情

相关推荐

建立开源项目的商业伙伴关系网络

建立开源项目的商业伙伴关系网络 摘要 本文探讨了开源项目与商业伙伴关系的重要性,以及如何建立和维护一个有效的商业伙伴关系网络。通过识别和评估潜在合作伙伴,建立合作关系,管理合作伙伴生态系统和风险管理,本文提供了一系列策略和实用工具,帮助开源项目团队充分利用商业伙伴资源,实现项目目标。同时,通过案例分

AI天才研究院 907

jdbc 生成建表语句_如何根据已有的Mysql数据库自动生成创建语句

1、先用Navicat for MySQL创建名字为shopping的数据库,如下图所示:2、创建的shopping数据库上运行已有的.sql文件,要注意上面创建的数据库名字shopping最好和原先.sql文件中的名字一样,也可以不一样,如果不一样的话会自动生成原来.sql文件中SQL语句中所命名的数据库。此时,可以把上面创建的shopping数据库删除了就可以,直接用自动生成的就行。运行.sq...

weixin_36483061的博客 1189

Aurix TC387 Ethernet代码解析之二_移植

英飞凌官方仅提供了TC397的例程,故需通过TC397例程来移植到TC387新建工程里。TC397官方例程名称【Ethernet_1_KIT_TC397_TFT】,网络上可以免费获取到,此处不赘述。使用工具【

m0_69929716的博客 885

MySQL 笔记 — 创建库与表

人类在进化的过程中,创造了数字、文字、符号等来进行数据的记录,但是承受着认知能力和创造能力的提升,数据量越来越大,对于数据的记录和准确查找,成为了一个重大难题。 计算机诞生后,数据开始在计算机中存储并计算,并设计出了数据库系统。

记录学习过程,欢迎讨论交流~ 325

第八章 MobileNetv3网络详解

本文介绍了基于互补的搜索技术和新颖的架构设计的MobileNets的下一代。MobileNetV3通过硬件感知网络架构搜索(NAS)和NetAdapt算法相结合,针对移动电话CPU进行优化,随后通过新颖的架构改进技术进行了进一步提高。本文开始探索自动化搜索算法和网络设计如何相互协作,以利用互补的方法改进整体技术水平。通过此过程,我们创建了两个新的MobileNet模型:MobileNetV3-Large和MobileNetV3-Small,分别针对高资源和低资源使用情况。

ADICDFHL的博客 1万+

ParaView: 从 2 或 3 个标量创建向量

ParaView: 从 2 或 3 个标量创建向量

希望我的博客,能帮上你解决学习中工作中所遇到的问题 585

MySQL数据库创建库和数据表

MySQL 创库,创表流程

G6_12的博客 9720

软考「系统规划与管理师(第2版)」抱佛脚|案例分析预测

规划类(系统/数据/云)+ 服务过程找错改进 + 风险应急终止三大块各备一套成熟模板,术语统一按第2版新教材口径,案例分析 45 分线的希望就大很多。

软件行业技术文化交流。 74

hibernate---SchemaExport(手动用程序生成建表语句)

作用:可以让建表语句在程序中实现。 先在hibernate.hbm.xml中注释掉下面的语句:如图: 开发中一般是先建好表,再写好实体类,然后再做好影射。 可以配置文件自动生成,也可以在程序中手动自己来写。 此次生成的建表语句没有约束和长度之类的设置。但是如果你想设置,怎么办?一般不用这种 转载于:https://www.cnblogs.com/m-xy/a...

weixin_30299539的博客 163

华为OD机试 - 机器人活动区域(Python/JS/C/C++ 双机位C卷 200分)

本专栏收录于《华为OD机试真题(Python/JS/C/C++)》。刷的越多,抽中的概率越大,私信哪吒,备注华为OD,加入华为OD刷题交流群,每一题都有详细的答题思路、详细的代码注释、3个测试用例、为什么这道题采用XX算法、XX算法的适用场景,发现新题目,随时更新。现有一个机器人,可放置于 M × N的网格中任意位置,每个网格包含一个非负整数编号。当相邻网格的数字编号差值的绝对值小于等于 1 时,机器人可在网格间移动问题:求机器人可活动的最大范围对应的网格点数目。说明:1)网格左上角坐标为 (0, 0),右

学Java,找哪吒 1434

android 9.0Settings休眠时间项(屏幕超时)添加永不休眠功能

在9.0的系统产品开发中,系统中默认息屏时间为1分钟,可以通过在Setting中的息屏时间选项设置对应的息屏时间,但是在开发平板类的产品中,需要实现永不休眠的功能,所以需要在Settings中的息屏时间中添加永不休眠时间这一项来实现这个功能,接下来看息屏时间的相关功能,来添加这个功能

安卓兼职framework和app工程师的博客 2056

hibernate知识点回顾

1.当碰到session关闭时的异常时,解决方法是扩大session的作用域(在spring中补充)。 2.数据的持久化指的是将数据在持久态和瞬时态之间转换的一种机制,持久化的主要应用是将内存中的对象存储在关系型数据库中,或是磁盘文件、XML数据文件中。 3.实体类的配置文件,id表示主键,generator表示主键生成方式。如Student.hbm.xml

apologize的学习之路 1348

MuJoCo 入门教程(八)Model仓库

一个物理仿真器的好坏取决于它所仿真的模型,而在像 MuJoCo 这样功能强大、建模选项众多的仿真器中,很容易创建出行为与预期不符的 "坏 "模型。MuJoCo Menagerie 的目标是为社区提供一个设计精良、开箱即用的模型集。更多信息,请访问 Menagerie 资源库。

机器人控制与仿真应用 1940

MySQL—多表查询—多表关系介绍

这篇博客的主要内容讲到了MySQL中的多表查询中的多表关系。里面详细的介绍了什么是多表关系。以及讲到了多表关系中:一对多、多对多和一对一的案例以及实操......

岁岁岁平安的博客 1603

水与光的奇妙“切割之舞”:水导激光切割技术探秘

水导激光切割技术的诞生,是材料加工领域不断追求高精度、高质量加工的成果。传统激光切割技术在加工过程中,材料会因瞬间高温而产生热变形、热影响区大以及切割面粗糙等问题,这些弊端在对一些高精度、热敏性材料的加工中尤为突出 ,迫切需要一种新的技术来克服这些难题。水导激光切割技术的起源可以追溯到 20 世纪 80 年代。1986 年,德国公司 Aesculap-Werke AG 首次提出了将水流引入激光切割过程的创新想法,并制造出首代水导激光设备。不过,当时的技术尚处于雏形阶段,仅仅是在光纤出口添加了一小柱水流,激光

远程部署调试 运行安装 项目调试 二次开发 项目技术新 持续迭代 部分源码免费分享 1674

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

EF core 建立多对多表关联关系的方法,记录一下刨坑历程

** EF core 建立多对多表关联关系的方法,记录一下刨坑历程 ** 代码: 表1:PersonalizedBill using System; using System.Collections.Generic; using System.ComponentModel.DataAnnotations; namespace Management.core.Models { public...

lbttwo的博客 2520

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

是否需要给数据库中的表与表之间建立关系

建立数据库时,根据系统的需求结合数据库设计理论(如BNC范式规则等等)设计各个表。把表的初步结构定出来。然后把各表的关键字有关系的建关系。这就ok了吗??? 我认为不是应该是这样的。 我先来跟大家探讨一下儿数据库表间建立关系的利与敝: 利:如果你的关系建立的没有错误的话数据的参照完整性肯定能得到保证,不会出现数据不一致的情况。实现级连删除非常方便。省去了为保证参照完整性用代码保证级连删除的工

Mr.Yan的专栏 4727

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

Django框架(5.django中模型类建立关系和多表关系查询)

1.建立好模型类: from django.db import models # 设计和模型对应的类,(模型类) # Create your models here. # 一类 # 图书类 class BookInfo(models.Model): """图书模型类""" # CharField是字符串类型,max_length指定字符串的最大长度 btitl...

Mogul的博客 497

多表关系与多表查询概述

我们之前在讲解SQL语句的时候,讲解了DQL语句,也就是数据查询语句,但是之前讲解的查询都是单表查询,而除此之外我们还可以进行多表查询。本片文章,我们先对多表查询的基础知识作讲解,为下篇文章详细介绍多表查询打下基础。

2401_85409229的博客 1439

用SQL语句建立第2章习题6的4个表:针对建立的4个表用sql完成第2章习题6的查询

第三章第4和5题1创建表2插入表3第三章第4题1求供应工程J1零件的供应商号码SNO2求供应工程J1零件p1的供应商号码SNO3求供应工程J1零件为红色的供应商号码SNO4求没有使用天津供应商生产的红色零件的工程号5求至少用了供应商s1所供应的全部零件的的工程号JNO4第三章第5题1找出所有供应商的姓名和所在城市2找出所有零件的名称,颜色,重量3找出使用供应商s1所供应零件的工程号码4找出工程项目...

偶尔想看云飞的博客 4万+

Oracle表空间、用户、表之间的关系

  Oracle中建立表空间、用户、表       下面通过一个在oracle中建立方案的例子来说明oracle中表空间、用户、表之间的关系,       一般在oracle中建立方案的步骤为:创建表空间→创建用户并设置其表空间和权限→创建数据库对象(表、视图、索引等) (1)先用system用户登录oracle (2)新建表空间: create tablespace tbs_

黎明之前的救赎 2632

使用sqlalchemy建立关系

使用sqlalchemy建立关系

张树的博客 3908

sql多表的关系介绍

sql多表的关系介绍 (1)项目中的多表 1:在实际的开发中,项目一定是有多张表组成的,这些表之间是有关系 2:表与表之间的关系分类: 一对一,一对多,多对多 (2)什么是一对一? A表的一行对应B表的一行,反之也成立,此时,两张表可以合并成一张表 (3)什么是一对多? A表的一行对应B表的多行,反之不成立 (4)什么是多对多? A表的一行对应B表的多行,B的一行对应A表的多行 多表的关系-一对多关系 (1)初始化数据 (2)一对多的创建流程 》创建主表(分类表) 》创建从表(商品表) 》给主表

水巷石子的博客 6507

数据库-多表关系

数据库-多表关系

m0_63949203的博客 1144

grom多表关系

默认的连接表,只有双方的主键id,展示不了更多信息了这是官方的例子,我修改了一下ID uintID uint这个功能还是很有用的,例如你的文章表 可能叫ArticleModel,你的标签表可能叫TagModel那么按照gorm默认的主键名,那就分别是ArticleModelID,TagModelID,太长了,根本就不实用这个地方,官网给的例子看着也比较迷,不过我已经跑通了主要是要修改这两项joinForeignKey 连接的主键idJoinReferences 关联的主键id。

qq_43000128的博客 963

多表查询、外键、表与表之间的关系

外键 通常在实际工作中,数据库中表格都不是独立存在的,且表与表之间是有种联系的,比如两张表格,一张为分类表category,一张为商品表product。在分类表中有两个信息,cid、cname,商品表中有三个数据信息pid、name、price。两张表要想有着某种联系,需要设定主键和外键两个属性,其中在分类表(主表)中将cid设置为主键,商品表(从表)中pid设置为外键。 外键特点:

xiaoyuxianshenging的博客 9205
上一篇: Maven依赖Scope选项详解
下一篇: 项目总结之前端页面常用插件
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值