iis服务器助手广告广告
返回顶部
首页 > 资讯 > 数据库 >万能数据库设计方法探索
  • 424
分享到

万能数据库设计方法探索

2024-04-02 19:04:59 424人浏览 八月长安
摘要

近日负责公司统一用户中心的数据库表结构设计,在工作过程中,诞生了一些另类的想法,特分享出来,期待大家拍砖。思想的演化过程如下。第一阶段:将企业、机构、家庭等实体抽象为“组织”,Organization,简称

近日负责公司统一用户中心的数据库表结构设计,在工作过程中,诞生了一些另类的想法,特分享出来,期待大家拍砖。


思想的演化过程如下。


第一阶段:

将企业、机构、家庭等实体抽象为“组织”,Organization,简称 “O”,允许多级组织,通过parentId关联;

将部门等组织下属分支实体抽象为“部门”,Department,简称“D”,允许多级部门,通过parentId关联;

将自然人实体抽象为“自然人”,Human,简称“H”;

抽象出“账户”,Account,简称“A”;

抽象出“角色”,Role,简称“R”。

每一个组织允许拥有多个部门;每一个组织允许拥有多个自然人;每一个部门允许拥有多个自然人。

每一个组织、部门、自然人,都允许拥有多个账户。

账户可以共享多个角色。

第一阶段E-R关系如图

万能数据库设计方法探索

这是一个非常简单清晰的模型。

遗憾,真实世界不会如此简单。


第二阶段:

通过对产品业务的深入了解,需求变更为:

一个组织拥有多个部门,但同时一个部门可以从属于多个组织。(例:两个独立经营的连药店,共享同一个仓储部门。)

一个部门拥有多个自然人,但一个自然人可以从属于多个部门。(例:一个公司的总经理,兼职多个重要部门的部门经理。)

一个组织拥有多个自然人,但一个自然人可以从属于多个组织。(例:一个医生,可以多点执业。)

第二阶段E-R关系如图

万能数据库设计方法探索

现在还算是正常情况。


第三阶段:

新增一个简单的功能——邮政收货地址。

这是一个简单功能,但此次复杂之处在于:业务上,到底是“组织拥有收货地址?部门拥有收货地址?自然人拥有收货地址?还是账户拥有收货地址?各实体与收货地址,是一对一,还是一对多的关系?”这些问题,产品无法确定未来的功能扩展方向,只能回答“都有可能”。哈哈。。。

按照常规方法设计,为组织、部门、自然人、账户与收货地址之间,两两添加多对多关系表。关系表的数量开始膨胀,如同一个果园里,杂草数量比果蔬的数量都要多。。。

为了减少杂草数量,设计了一种抽象杂草:

添加实体(组织、部门、自然人、账户)与邮政地址的关系,由实体枚举code与实体id两个值,决定真实实体;由邮政收货地址Id,决定收货地址。

例如:

实体枚举code O, 实体id 1,邮政收货地址id 10,表示:id为1的某个组织,拥有id为10的某个收货地址。

实体枚举code H, 实体id 2,邮政收货地址id 20,表示:id为2的某个自然人,拥有id为20的某个收货地址。

实体枚举code A, 实体id 3,邮政收货地址id 30,表示:id为3的某个账户,拥有id为30的某个收货地址。

第三阶段E-R关系如图

万能数据库设计方法探索

第四阶段:

此时公司高层加入需求讨论,

A、要求对数据的控制颗粒度应该达到单条数据,并且可能要根据数据与周边任意实体的关系,进行权限控制,但是具体需求不定,要求做最大弹性设计。

B、追加资质管理、效期管理等功能,业务同样不知道未来的扩展方向在哪里,要求做最大弹性设计。

于是,抽象杂草的数量也开始膨胀起来。

针对需求A,设计了OneId表,将所有实体的Id在表中备份,未来一旦进行数据行级权限控制,通过OneId表进行关系扩展。

而为了让抽象杂草的数量不膨胀,设计了万用关系表,设计如下:

万用关系表
实体枚举code实体Id实体枚举code实体Id

举例

万用关系表
实体枚举code实体Id实体枚举code实体Id
O1H10
O1H11
H10A100
H10A101

上述数据,描述了

“Id为1的某个组织,拥有id为10、11的两个自然人”;

“Id为10的某个自然人,拥有id为100、101的两个账户”。


任何复杂的/未定的多对多关系,都可以用此万用关系表进行描述。


整个数据库设计最终版变化为:

万能数据库设计方法探索

注意:无论未来业务如何扩展,关系如何变化,仅需要扩展新的实体即可,不用再考虑与其他实体的关系,对历史设计不会产生任何冲击。


这是一种背离了所有现行数据库设计范式,简单万能的数据库设计方法,Universal DB Design Method,UDDM,简称犹大方法吧,感觉很贴切。


对上述设计方法,我的团队内部已没有足够的能力去评判正误,期待大家踊跃拍砖、共同探索。


您可能感兴趣的文档:

--结束END--

本文标题: 万能数据库设计方法探索

本文链接: https://www.lsjlt.com/news/43002.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 数据仓库的魔法棒:探索数据库设计工具的魔力
    数据仓库是组织存储和管理其大量数据的中心位置。为了有效利用这些数据,需要利用专门的数据库设计工具来创建和维护高效且可靠的数据仓库。这些工具为数据仓库设计过程提供了至关重要的功能,使其成为组织成功的战略资产。 数据仓库设计工具的功能 概念建...
    99+
    2024-03-13
    数据库设计工具
  • 数据库索引并不是万能药
    目录InnoDB是如何存储数据的?聚簇索引和二级索引考虑额外创建二级索引的代价不是所有针对索引列的查询都能用上索引数据库基于成本决定是否走索引重点回顾几乎所有的业务项目都会涉及数据存...
    99+
    2024-04-02
  • 如何设计数据库索引
    本篇内容主要讲解“如何设计数据库索引”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“如何设计数据库索引”吧!MySQL中的索引MySQL中的InnoDB引擎使用B...
    99+
    2024-04-02
  • 数据管理的革命者:探索数据库设计工具的未来
    人工智能驱动的设计 人工智能 (AI) 正在改变数据库设计过程。通过自动化任务、优化数据模型和提供见解,AI 驱动工具可以显著提高设计人员的效率和准确性。例如,AI 可以分析数据模式,识别潜在的冗余并建议优化以提高性能。 低代码/无代码平...
    99+
    2024-03-13
    数据库设计工具
  • 数据库索引的未来:探索数据检索的无限可能
    人工智能和机器学习 人工智能 (AI) 和机器学习 (ML) 正在改变索引设计和维护方式。AI 算法可以分析数据模式并自动识别最佳索引策略。ML 模型还可以预测查询负载并动态调整索引,以优化性能。 NoSQL 数据库 NoSQL 数据库,...
    99+
    2024-04-02
  • 阿里云计算市场数据库建设的实践与探索
    本文将探讨阿里云计算市场数据库建设的实践与探索,包括市场数据库的概念、阿里云在数据库建设方面的优势、数据库建设的具体步骤、以及未来发展的趋势。 一、市场数据库的概念市场数据库是企业为了收集、管理、分析和利用市场信息而建立的数据库系统。它可以...
    99+
    2023-10-30
    阿里 数据库 市场
  • 用 PHP 探索高效的数据结构设计
    php 中的数据结构涵盖数组、链表、栈和队列四个类型,各自适用于不同应用场景。数组:线性结构,用于存储相同类型的值,查找和插入高效。链表:节点连接的数据结构,插入和删除高效。栈:遵循 l...
    99+
    2024-05-07
    php 数据结构
  • 数据库的设计方法有哪些
    本篇内容介绍了“数据库的设计方法有哪些”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成! ...
    99+
    2024-04-02
  • 数据库设计的方法是什么
    本篇内容主要讲解“数据库设计的方法是什么”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“数据库设计的方法是什么”吧!数据库设计1. 为什么要设计数据库节省数据的存储空间保证数据的完整性方便根据数据...
    99+
    2023-06-16
  • 数据库设计的方法有哪些
    这篇文章主要讲解了“数据库设计的方法有哪些”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“数据库设计的方法有哪些”吧!数据库设计技巧: 第2 部分—...
    99+
    2024-04-02
  • 索引设计属于数据库设计的哪个阶段
    这篇文章给大家分享的是有关索引设计属于数据库设计的哪个阶段的内容。小编觉得挺实用的,因此分享给大家做个参考。一起跟随小编过来看看吧。索引设计属于数据库设计的物理设计阶段。数据库设计是指对于一个给定的应用环境...
    99+
    2024-04-02
  • MySQL数据库范式化设计的方法
    这篇文章主要讲解了“MySQL数据库范式化设计的方法”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“MySQL数据库范式化设计的方法”吧!一、设计范式问题: 什么是范式化设计,为什么需要反规范...
    99+
    2023-06-30
  • 千万级数据的mysql数据库与优化方法
    本篇内容主要讲解“千万级数据的mysql数据库与优化方法”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“千万级数据的mysql数据库与优化方法”吧!1.对查询进行...
    99+
    2024-04-02
  • 数据库连接池进阶技巧:探索数据库性能的极限!
    数据库连接池是应用程序与数据库之间交互的关键组件,对数据库性能至关重要。通过优化连接池设置,开发人员可以显著提高查询速度、减少响应时间,并确保应用程序在高并发负载下的稳定性。本文将深入探讨数据库连接池的进阶技巧,帮助您解锁数据库性能的极...
    99+
    2024-03-03
    数据库连接池 性能优化 JDBC Hibernate 连接管理
  • Mysql数据库百万级数据测试索引效果
    目录Mysql数据库百万数据测试索引一、索引的分类二、使用索引三、百万数据测试索引效果1. 再来创建个测试表2. 插入数据3. 测试查询四、索引使用原则Mysql数据库百万数据测试索...
    99+
    2024-04-02
  • 数据库设计界的法宝:数据库设计工具深度剖析
    数据库设计工具是数据库开发过程中不可或缺的利器,它们提供了一系列功能,帮助设计人员创建高效、可靠和可维护的数据库。本文将深入剖析数据库设计工具的架构、特性和优缺点。 架构 数据库设计工具通常采用分层架构: 用户界面层:提供图形界面,供设...
    99+
    2024-03-10
    引言
  • 数据库索引的时空奥义:探索数据维度,掌控性能之匙
    数据库索引是加速数据检索的关键技术。它是一种排好序的数据结构,将数据表中的特定列映射到表中相应记录的指针。当查询表时,索引允许数据库绕过表中的逐行扫描,直接跳转到包含所需数据的行。 时空维度:索引的两个基石 索引的时空属性是其核心的两个方...
    99+
    2024-03-11
    索引:数据存取的加速器
  • 探索数据库的实现原理
    本篇内容介绍了“探索数据库的实现原理”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!归并连接的思想与归并排序...
    99+
    2024-04-02
  • 数据仓库设计的秘密:数据库设计工具的秘密配方
    明确业务需求:确定数据仓库的目标、范围和用户需求。 选择适当的模型:根据业务需求选择维度建模或事实建模。 规范数据结构:使用数据字典和数据目录保持数据一致性和完整性。 优化性能:通过分区、索引和物化视图等技术提高查询效率。 注重数据安全...
    99+
    2024-03-13
    数据库设计工具
  • 阿里云数据库创造探索数据世界的无限可能
    # 阿里云数据库创造是阿里云在数据库领域的一项创新举措,旨在为用户提供高效、可靠和安全的数据库服务。本文将探讨阿里云数据库创造的意义和优势,并举例说明其在不同行业中的应用。1. 高效性能与可扩展性阿里云数据库创造提供了强大的性能和可扩展性,...
    99+
    2024-01-19
    阿里 数据库 数据
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作