首页 > 编程知识 正文

mysql数据库概念设计,mysql数据库设计的范式

时间:2023-05-06 05:43:03 阅读:170273 作者:2278

数据库设计关系表以承载“数据建模”的“数据结构”部分。

数据建模的第二部分是“数据操作”。 即库存和流量业务数据的各种业务处理和保存。

这一部分曾受到存储过程和数据库本身功能的限制,如自定义函数、存储过程等。 随着程序越来越复杂,在工业界的实践中,“数据操作”这一部分已经从数据库系统中剥离出来,并通过程序来实现。 实际上,一些数据结构是为了以配置文件的形式存在而剥离的。

因此,“数据结构”的设计必须结合“数据操作”的程序实现方式,并不遵循完全归一化的规定。

范式是什么? (normal form )是一种规范的模式,是一些要求和建议的规则,一般这样做是最合理的。 当然也有别的理由。 范式不是必须实现的标准。 操作数据的过程不同,随着世界的发展,数据结构的设计也必然会变得多种多样。

但是,在关系数据建模中,有一些是不变的。 那就是无视所有业务的详细情况和操作要求,

1、表都是实体的集合

2、实体有唯一标识

3、实体之间存在联系,联系通过关系表示

关于关系,只有三种就可以充分表达。 即一:一、一:多、多:多

到目前为止,我明白了关系表的含义,只有这三种关系才能清楚地表示所有的表数据结构。

那么,这三种关系如何在关系数据库中实现?

想法很简单,就是把主键当成一个维度。 通过维创建坐标系来表示点。

在本文的示例中,员工ID是主键。 所以员工表是一维空间。 部门ID是主键,部门表也是维空间。 员工和部门在各自的一维空间中独立存在。 此时无关紧要。

如果存在关系,为了简单起见,假设这两个主键所表示的字段位于同一个表: '员工部门'的表中。

(通过中间实体的间接关联情况基于单纯的进化,但这里只考虑基本模型)

考虑最简单的情况,员工ID部门ID构成联合主键。

此时,由于该表是二维空间,所以可以看出表现的关系是多:多的关系。

那么,如何表示一)多关系?

首先必须确定1,所以这个空间必须是一维空间。

假设是员工空间,则员工ID是唯一的主键。 此时,部门ID作为一个属性介入这个世界,可以看到有无数平行的员工ID维度,员工实体通过提升维度散落在这些平行线上。 但是,当投影到特定“员工ID”维的联机时,这些员工实体不匹配。

这样,实现了一:多的关系。

也就是说同一个部门(请注意这里的表达。 这里的一个是部门。 )此维线上有许多员工ID实体。

部门ID不必是外部主键。 也就是说,不是必须有部门表。 因此,这里的部门ID可以更改部门的名称。

到目前为止,关系只是数量层面的现象,实际的制约是结合业务正确解释。

由于存在原始员工表和冗馀模式,因此这种方法通常会收敛于在员工表中嵌入部门ID。

对于一对一的关系,基于一对多,只需要要求多字段的属性为unique。

当然,unique也可以用程序控制。 使用程序也是一般的表现。

原始员工表和现有的关系表对员工来说也是一对一的关系。 但是,这种关系是用数据表示的,也就是说,是由程序保证的。 同样的情况下,还有表格的垂直分割。

回到问题吧。

1、两种方案都可以体现员工与部门的关系。

2、方案1在数据关系方面,只是一对多。

3、方案2在数据关系中,其实是多对多。 应对了一对多的情况。

因此,方案2的可扩展性必须明显加强。 在这里不能通过范式或反向范式得出结论。 因为部门和员工的关系,以后可能真的会多对多。 另外,由于程序中的数据操作也表达了数据关系,所以只靠数据表的结构,不能简单地得到逆范式的结论。

另外,考虑性能时,有时也需要反模式。

例如,如果员工部门的表是独立的,也可以进行表缓存,并进一步加载到缓存数据库中。 这样,员工登录时,系统可以根据部门情况快速确定权限。 如果员工表非常大,每次执行相关查询无疑增加了数据库的压力。 这是常见的空间交换方式。

在IT系统服务中,快确实是件好事。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。