【数据库】数据库设计之用实体集还是用属性(一)

简介: 数据库设计之用实体集还是用属性(一)

前言


在应用开发完成之后,要改变数据库的物理模式相对地比较简单。但是,由于可能影响到应用程序代码中散布的大量的查询和更新操作,因此改变逻辑模式的任务执行起来常常更加困难。因此,在建立后续的数据库应用之前,慎重实施数据库设计阶段是非常重要的。


数据库在软件项目架构设计中,一般偏向于底层,在分层架构中,数据库之上会有一些数据访问层,会用到jdbc、odbc、mybatis、hibernate、SQLAlchemy、database/sql、gorm……等形形色色的数据访问工具。数据库中一旦模式(schema)发生变化(尤其是修改操作),对上层来说,通常是致命的。在测试领域,测试人员最怕听到的一句话大概就是:“程序改了底层逻辑”。因为这时候,基本意味着以前测过的内容需要重新再测一遍。


我在初次设计平台项目的数据库模式时,一直很纠结数据库表与表之间的关系究竟该怎么判定?实际义务中的一个语义,在数据库建模时,该用实体集还是用属性?


正文


表与表之间的关系?


这个不是本节的重点,不过通过实际项目的实战经验,建议不知道改用一对一、一对多还是多对多关系时,就用多对多关系。因为现在的数据访问层代码基本不会需要程序员去手写多表连接查询之类的复杂 SQL 了,ORM 框架已经包办了,调用简洁明了的接口就可以了。因此为了扩展性,直接选择使用多对多关系就可以了,通过前面,我们已经知道了,应用开发一旦过了初始阶段,几乎就不能改动数据库了。


实体集还是属性?


实体(entity)是现实世界中可区别于其他对象的一个“事物”或“对象”。

实体集(entity set)是相同类型即具有相同性质(或属性)的一个实体集合。

实体通过一组属性来表示。

属性(attribute)是实体集中每个成员所拥有的描述性性质。

实体集还是属性?举个例子说的好理解一点,手机号是应该作为一个人(table_person)表的字段(column_phone_num),还是单拎出来建一种新表(table_phone)与人(table_persion)表建关联关系?


一个人只是记录一下国内的手机号,那就作为属性;在一个人可能希望保存关于电话的额外信息,如它的位置,或类型(移动的、视频的或普通的老式电话),或共享该电话的所有的人时,将电话看做一个实体是一种更好的建模方式。因此,把电话视为一个实体比把它视为一个属性的方式更具通用性;而且当通用性可能有用的时候,这种定义方式就更为适合了。


由此自然而然就产生两个问题:什么构成属性?什么构成实体集?很遗憾,对这两个问并不能简单地回答。区分它们主要依赖于被建模的现实世界中的结构,以及被讨论的属性的相关语义。但通过前面手机号的例子,我们已经明白实际中遇到数据库建模问题时该往什么方向考虑了,这点至关重要!


目录
相关文章
|
2月前
|
NoSQL 数据库
Google Earth Engine(GEE)——美国大陆(CONUS)30米土壤属性概率图数据库
Google Earth Engine(GEE)——美国大陆(CONUS)30米土壤属性概率图数据库
32 0
|
1月前
|
SQL 关系型数据库 MySQL
【MySQL】— —熟练掌握用SQL语句实现数据库和基本表的创建。熟练掌握MySQL的安装、客户端登录方法;熟练掌握MySQL的编码、数据类型等基础知识;掌握实体完整性的定义和维护方法、掌握参照完整性
【MySQL】— —熟练掌握用SQL语句实现数据库和基本表的创建。熟练掌握MySQL的安装、客户端登录方法;熟练掌握MySQL的编码、数据类型等基础知识;掌握实体完整性的定义和维护方法、掌握参照完整性
101 1
|
6月前
|
前端开发 Java 关系型数据库
【Mybatis-Plus】mybatisplus更新时,实体字段为空,数据库不更新的解决方案
【Mybatis-Plus】mybatisplus更新时,实体字段为空,数据库不更新的解决方案
256 0
|
3月前
|
NoSQL Java 关系型数据库
基于Java swing和mysql实现酒店管理系统(源码+数据库+运行指导视频+系统用户使用手册+系统PPT+数据库设计说明书+系统概要说明书+需求说明书+详细说明书)
基于Java swing和mysql实现酒店管理系统(源码+数据库+运行指导视频+系统用户使用手册+系统PPT+数据库设计说明书+系统概要说明书+需求说明书+详细说明书)
|
10月前
|
Java 数据库 Spring
spring data jpa 框架在实体类中添加非数据库字段的属性
Spring-data-jpa表实体的字段和表的字段是一一对应的。比如,那么,如果我在查询时,想在表字段的基础上添加几个返回的字段,怎么办?
295 0
|
8月前
|
SQL Java 数据库
第一季:8spring支持的常用数据库事务传播属性和事务隔离级别【Java面试题】
第一季:8spring支持的常用数据库事务传播属性和事务隔离级别【Java面试题】
96 0
|
2月前
|
存储 关系型数据库 MySQL
MySQL技能完整学习列表4、数据库设计——2、数据库规范化(Normalization)——3、实体-关系模型(ER Modeling)
MySQL技能完整学习列表4、数据库设计——2、数据库规范化(Normalization)——3、实体-关系模型(ER Modeling)
60 0
|
3月前
|
存储 安全 数据库
电商管理系统的数据库设计思路和数据库代码
电商管理系统的数据库设计思路和数据库代码
57 0
|
4月前
|
SQL Oracle 关系型数据库
数据库的事务的四大属性和四大隔离级别(mysql)
数据库的事务的四大属性和四大隔离级别(mysql)
70 0
|
8月前
|
Java 数据库
【数据库】Java实体类的属性类型与数据库表字段类型对应表
在这里对数据库的各个字段和java中的实体类属性类型做一个简单的总结,其实网上大多都有相关的文章,我也是在这里记录一下,以后方便自己查看。
133 0

热门文章

最新文章