数据表设计规则记一下

数据表设计规则总结

数据库设计是有几大范式的,但是他们都比较高深莫测,实际开发中我们遵循下面的规则即可:

  1. 每张表只存储一类数据,比如用户表就存储用户信息;(做关联用的列不算,比如上面例子中人的表中还存储了房子的地址,但是地址是做关联用的)
  2. 设计表之前首先要划分清楚各模块是什么,比如用户模块、车、房子,然后理清楚各模块间的关系,两张表之间如果存在关联关系,则该关系可以分为三种:一对一,一对多,多对多。
  3. 分别先独立的设计各个表的结构,这样设计完后是一张张相互独立没有关联的表,然后按照两表之间的关系来进行完善即可。

那么两表之间的关系如何完善呢?

  1. A和B之间是1对1关系,则将一张表的唯一字段(唯一能够确定一行数据的)放入另外一张表中:比如用户表和手机表是1对1的关系,那么我们可以将用户身份证号放入手机表中,作为手机表的列名(字段)之一。
  2. A和B之间是1对多 关系,则将“一”这一端的唯一字段放入“多“的一端中:比如用户表和衣服表,一个用户有多件衣服,一件衣服只属于一个用户,那么就将身份证号放入衣服表中即可
  3. A和B之间是 多对多 关系,则建立一张中间表,把AB两表中的唯一键放入中间表即可:比如手机表和APP表,一个手机可以安装多个APP,一个APP可以被多个手机安装。那么我们将APP的ID号和手机的手机号一同放入一张中间表(也叫关联表)中即可。

————————————————
本文为CSDN博主「oatlmy」的原创文章。
原文链接:https://blog.csdn.net/zhou307/article/details/81106362

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Firebird是一个全功能的,强大高效的,轻量级,免维护的数据库。它很容易让您从单用户,单数据库升级到企业级的应用。 一个firebird数据库服务器能够管理多个独立的数据库,每一个数据库同时可支持多个客户端连结。 关键特性:支持原子性,并发性,隔离性等概念。 MGA:支持事务的多个版本功能, 存储过程: 使用PSQL(Procedure SQL),你可以创建强大的存储过程来处理服务上的所有数据,你可以使用select Stored Procedure的形式,使用存储过程,以得到一个虚拟的结构的结果。这样的话,你就可以很容易的在报中使用它。 事件:存储过程和触发器可以引发事件,这个事件可以被客户端程序监听到 生成子:生成子也称为序列,它可以很容易的实现自动增加的字段。它是一个INT64的长度,因此,它可以用在一个事务中,也可以用在其它很多方面。 只读数据库: 我们可以把数据库存放在CD中,形成一个只读数据库。如果我们的应用程序 也在光盘上,再加上嵌入式的FB数据库服务器,便可以得到一个无与伦比的 CDLIVE(即只用光盘就可以运行起来)应用。 全事务控制: 一个客户端可以存在多个并发的事务。并且每一个事务都可以独立的进行控制,两段提交功能可以保证数据库的一致性。锁优化机制也支持多个事务的保存点。 在线备份: 不需要停止数据库即可进行备份,一个备份进程产生一个数据库当前的快照。因此,用户可以在备份期间持续的工作,即实现24x7(每天24小时,每周7天) 的操作。 触发器: 每一个可以有多个并发的行级触发器,可以在插入前,插入后,更新前,更新后,删除前,删除后进行触发。我们可以在触发器中写入PSQL语句,默认值,产生异常,firebird现在支持统一触发器,即可以一个触发器中,一次性管理插入,更新,删除的操作。 扩展函数: 我们可以使用C语言,C++,DELPHI写UDF,使用UDF(用户定义函数库)可以很容易的挂入数据库引擎中以扩展我们需要的功能 字符集:Firebird实现了很多国际标准的字符集,包括Unicode。 SQL标准兼容:Firebird 实现了全部SQL92所要求的功能,实现了SQL99最常用的的要求。包括但不限于"FULL/LEFT/RIGHT [OUTER] JOIN , UNION, DISTINCT , 子查询 (IN, EXISTS),内部函数 (AVG, SUM, MIN, MAX, COALESCE, CASE, ..), 主键,外键,唯一索引以及所有通用的数据类型。 Firebird还实现了域,字段级别的约束,视图,异常,规则和权限管理,更多的详细信息,请参考Firebird发布通知和参考手册。 硬件需求: Firebird可以工作最常见的硬件环境中,甚至非常差的硬件中,也能很好的工作,当然,硬件的要求依赖于你想做什么,例如 ,你有多少个并发用户等等。 有效的平台支持: Firebrid在常见的平台上都可运行,如Linux和Windows(包括Windows终端服务器)其它支持的平台包括(MAC OS(苹果机), Solaris及HP-UX) 把数据库从一个平台转到另一个平台,非常的容易,只要备份数据库,然后,再到另一个平台上恢复即可 可连接性: Firebird 支持一系列的连接方法,目前,可以通过原生的DELPHI,C++组件连接,也可以通过ODBC,JDBC,PHP,OLEDB,DbExpress进行连接。原生 的联连提供了直接调用Firebird的API函数库(fbclient.dll/.so)进行调用的能力。 物理限制: Firebird支持非常巨大的数据库数据库可以分成多个物理文件。每个文件的大小依赖于操作系统的限制。当前一个数据库文件最大的理论限制是64T (即64000G),因此,常见的限制通常是操作系统的限制以及磁盘空间的限制。 服务器引擎版本: 当前有三个服务器版本。 标准服务器:每一个客户连接将引发一个服务器进程(支持多处理器) 超级服务器:一相服务器进程模块管理所有的客户端连接,当前不支持多处理器。 嵌入服务器:整个服务器引擎就是一个动态库,只支持本地通过IO进行调用。 但是,所有的服务器都使用一种数据库格式,因此,你可以很方便的在不同的引擎之间共享数据库文件的数据。 协议: Firebird协议使用IPL(interbase public license)和IDPL(Initial Developer's Public License),这种协议类似于Mozilla协议。你可以完全的自由使用并且可以自由的布署在你的客户应用上。 你不需要公开你的源代码。当然,如果你修改和数据库引擎,你应该公布源代码。 工具: 有很多的工具支持Firebird.包括自由的,免费的和商业的。 包括开发工具,管理工具,诊断工具等等。
firebird可以说是这个世界上最小的支持存储过程的数据库。Firebird是一个跨平台的关系数据库系统,目前能够运行在Windows、linux和各种Unix操作系统上,提供了大部分SQL-99标准的功能。它既能作为多用户环境下的数据库服务器运行,也提供嵌入式数据库的实现。 1、Firebird是一个真正的关系数据库,支持存储过程、视图、触发器、事务等大型关系数据库的所有特性;2、Firebird支持SQL92的绝大部分命令,并且支持大部分SQL99命令,新版Firebird 2.0对SQL99的支持更完整;3、Firebird源码基于成熟的商业数据库Interbase,有良好的稳定性,与Interbase有良好的兼容性;4、不用考虑授权费用(免费),不用担心将来有一天你或你的客户因为使用盗版而被数据库开发商告上法庭;5、发布简易,安装文件只有几M,且高度可定制,客户端的分发也很简单,只需一个DLL文件;6、Firebird的一嵌入式服务器版本,不用安装,直接运行,基于单机开发首选;7、Firebird的运行效率非常高;8、具备高度可移植性,可在Linux,Unix,MacOS,Windows,Solaris系统下运行,而且数据库格式完全一样,不用修改;9、开发环境支持良好,Delphi,C++Builder不用通过ODBC连接,直接用原生开发接口开发基于Firebird的程序。 1、只读数据库我们可以把数据库存放在CD中,形成一个只读数据库。如果我们的应用程序也在光盘上,再加上嵌入式的FB数据库服务器,便可以得到一个无与伦比的CDLIVE(即只用光盘就可以运行起来)应用。2、全事务控制一个客户端可以存在多个并发的事务。并且每一个事务都可以独立的进行控制,两段提交功能可以保证数据库的一致性。锁优化机制也支持多个事务的保存点。3、在线备份不需要停止数据库即可进行备份,一个备份进程产生一个数据库当前的快照。因此,用户可以在备份期间持续的工作,即实现24x7(每天24小时,每周7天) 的操作。4、触发器每一个可以有多个并发的行级触发器,可以在插入前,插入后,更新前,更新后,删除前,删除后进行触发。我们可以在触发器中写入PSQL语句,默认值,产生异常,firebird现在支持统一触发器,即可以一个触发器中,一次性管理插入,更新,删除的操作。5、扩展函数我们可以使用C语言,C++,DELPHI写UDF,使用UDF(用户定义函数库)可以很容易的挂入数据库引擎中以扩展我们需要的功能6、字符集Firebird实现了很多国际标准的字符集,包括Unicode。7、SQL标准兼容Firebird 实现了全部SQL92所要求的功能,实现了SQL99最常用的的要求。包括但不限于"FULL/LEFT/RIGHT [OUTER] JOIN , UNION, DISTINCT ,子查询(IN, EXISTS),内部函数 (AVG, SUM, MIN, MAX, COALESCE, CASE, ..), 主键,外键,唯一索引以及所有通用的数据类型。Firebird还实现了域,字段级别的约束,视图,异常,规则和权限管理,更多的详细信息,请参考Firebird发布通知和参考手册。 本易语言 模块,使用Firebird API直接连接,如果使用本地版,直接附带一个fbclient.dll即可,如果连接远程服务端,只需在连接数据库文件路径前添加"远端服务器ip:"即可. 新版:Firebird-3.0.4.33054-0_Win32,可以静默安装,也可以自行安装(不用选择,直接下一步下一步就完成了服务端的安装) 链接:https://pan.baidu.com/s/1Mr_1hsblBDvRpx-E8ofFXg 提取码: gmvq 这里有客户端dll文件,api的c语言示例和头文件(iberror.h是错误码对照;ibase.h是所有函数常量等的头文件)。
数据库范式(范式,数据库设计范式,数据库设计范式)是符合某一种级别的关系模式 的集合。构造数据库必须遵循一定的规则。在关系数据库中,这种规则就是范式。关系 数据库中的关系必须满足一定的要求,即满足不同的范式。目前关系数据库有六种范式 :第一范式(1NF)、第二范式(2NF)、第三范式(3NF)、第四范式(4NF)、第五范 式(5NF)和第六范式(6NF)。满足最低要求的范式是第一范式(1NF)。在第一范式的 基础上进一步满足更多要求的称为第二范式(2NF),其余范式以次类推。一般说来,数 据库只需满足第三范式(3NF)就行了。下面我们举例介绍第一范式(1NF)、第二范式 (2NF)和第三范式(3NF)。 在创建一个数据库的过程中,范化是将其转化为一些的过程,这种方法可以使从数据 库得到的结果更加明确。这样可能使数据库产生重复数据,从而导致创建多余的。范 化是在识别数据库中的数据元素、关系,以及定义所需的和各中的项目这些初始工 作之后的一个细化的过程。 下面是范化的一个例子 Customer Item purchased Purchase price Thomas Shirt $40 Maria Tennis shoes $35 Evelyn Shirt $40 Pajaro Trousers $25 如果上面这个用于保存物品的价格,而你想要删除其中的一个顾客,这时你就必须同 时删除一个价格。范化就是要解决这个问题,你可以将这个化为两个,一个用于存 储每个顾客和他所买物品的信息,另一个用于存储每件产品和其价格的信息,这样对其 中一个做添加或删除操作就不会影响另一个。 关系数据库的几种设计范式介绍 1 第一范式(1NF) 在任何一个关系数据库中,第一范式(1NF)是对关系模式的基本要求,不满足第一范式 (1NF)的数据库就不是关系数据库。 所谓第一范式(1NF)是指数据库的每一列都是不可分割的基本数据项,同一列中不能 有多个值,即实体中的某个属性不能有多个值或者不能有重复的属性。如果出现重复的 属性,就可能需要定义一个新的实体,新的实体由重复的属性构成,新实体与原实体之 间为一对多关系。在第一范式(1NF)中的每一行只包含一个实例的信息。例如,对于 图3-2 中的员工信息,不能将员工信息都放在一列中显示,也不能将其中的两列或多列在一 列中显示;员工信息的每一行只示一个员工的信息,一个员工的信息在中只出现 一次。简而言之,第一范式就是无重复的列。 2 第二范式(2NF) 第二范式(2NF)是在第一范式(1NF)的基础上建立起来的,即满足第二范式(2NF)必 须先满足第一范式(1NF)。第二范式(2NF)要求数据库中的每个实例或行必须可以 被惟一地区分。为实现区分通常需要为加上一个列,以存储各个实例的惟一标识。如 图3-2 员工信息中加上了员工编号(emp_id)列,因为每个员工的员工编号是惟一的,因此 每个员工可以被惟一区分。这个惟一属性列被称为主关键字或主键、主码。 第二范式(2NF)要求实体的属性完全依赖于主关键字。(即主关键字就代了所有属性 ,决定 了所有属性)所谓完全依赖是指不能存在仅依赖主关键字一部分的属性,如果存在,那 么这个属性和主关键字的这一部分应该分离出来形成一个新的实体,新实体与原实体之 间是一对多的关系。为实现区分通常需要为加上一个列,以存储各个实例的惟一标识 。简而言之,第二范式就是非主属性非部分依赖于主关键字。 3 第三范式(3NF) 满足第三范式(3NF)必须先满足第二范式(2NF)。简而言之,第三范式(3NF)要求一 个数据库中不包含已在其它中已包含的非主关键字信息。例如,存在一个部门信息 ,其中每个部门有部门编号(dept_id)、部门名称、部门简介等信息。那么在图3- 2的员工信息中列出部门编号后就不能再将部门名称、部门简介等与部门有关的信息再 加入员工信息中。如果不存在部门信息,则根据第三范式(3NF)也应该构建它,否 则就会有大量的数据冗余。简而言之,第三范式就是属性不依赖于其它非主属性。 数据库设计三大范式应用实例剖析 数据库设计范式是数据库设计所需要满足的规范,满足这些规范的数据库是简洁的、 结构明晰的,同时,不会发生插入(insert)、删除(delete)和更新(update)操作 异常。反之则是乱七八糟,不仅给数据库的编程人员制造麻烦,而且面目可憎,可能存 储了大量不需要的冗余信息。   设计范式是不是很难懂呢?非也,大学教材上给我们一堆数学公式我们当然看不懂 ,也不住。所以我们很多人就根本不按照范式来设计数据库。   实质上,设计范式用很形象、很简洁的话语就能说清楚,道明白。本文将对范式进 行通俗地说明,并以笔者曾经设计的一个
在Java中将Excel导入并存储到数据库可以按照以下步骤进行: 1. 使用Java中的Apache POI库来读取Excel中的数据。首先,需要添加POI依赖项到项目的构建文件中。 2. 使用POI库中的Workbook类打开Excel文件。根据文件的扩展名(.xls或.xlsx),选择适当的Workbook实现类。 3. 通过获取工作(Sheet)并遍历工作的行(Row)和单元格(Cell),可以获取Excel中的数据。根据Excel的结构,可以使用getCell()方法获取特定单元格的数据。 4. 通过解析每个单元格的数据,并使用Java的数据结构(如List、Map等)将其存储到内存中,以便稍后将其存储到数据库。 5. 连接到数据库,并使用JDBC(Java数据库连接)编程接口来执行数据库操作。首先,需要加载适当的数据库驱动程序,并使用合适的URL、用户名和密码建立连接。 6. 创建数据库,以存储从Excel导入的数据。根据Excel的结构,使用SQL语句创建和列。 7. 使用JDBC的PreparedStatement接口,为每个数据行创建并执行INSERT语句来将数据插入到数据库中。通过遍历内存中的数据集合,可以为每个数据行绑定参数并执行INSERT语句。 8. 在插入所有数据行后,提交并关闭数据库连接。关闭数据库连接可以释放资源,并确保数据被正确写入数据库。 9. 在完成数据导入后,可以进行必要的数据校验和验证。例如,检查插入的行数是否与Excel中的行数相匹配,或者检查插入的数据是否满足业务规则。 以上是将Excel格数据导入到数据库的基本步骤。+这个过程涉及到的具体实施会有更多的细节和实现方式,可以根据具体需求进行调整和改进。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值