news 2026/7/3 6:40:01

何为实体-属性-值的设计方式

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
何为实体-属性-值的设计方式

EAV(Entity-Attribute-Value)模型,我们先来了解一下。

EAV 把所有业务抽象成:

数据结构示例,如下所示:

Entity: Customer Attributes: name string phone string level enum Values: (001, name, "张三") (001, phone, "138****") (001, level, "VIP")

分别 包括定义实体表,对应的属性类别(名称、类型等),以及每个属性的值记录。

一句话说明就是:每个实体都有唯一的标识符,每个实体都可以有多个属性与之关联,每个属性都有唯一的标识符,每个属性都可以具有多个值。

我们对属性值表基于数据类型进行分割,每个不同的数据类型拆为一个单独的表,同时通过 属性表(Attribute) 添加 类型决定去哪里存取数据。

我们可以借鉴magento的eav模型,它是EAV设计的最优参考了。Magento 2中的EAV属性类型有下面这些表:

  • eav_entity_int
  • eav_entity_varchar
  • eav_entity_text
  • eav_entity_decimal
  • eav_entity_datetime

属性元数据驱动 UI 控件选择,我们也根据属性的类型进行定义,如可以定义不同的输入控件。

一句话,EAV + 元数据 + 通用UI + CRUD引擎 = 无代码业务系统

本质就是:

  • 业务结构:EAV建模

  • 界面构建:属性→控件自动映射

  • 数据交互:通用CRUD

  • 规则校验:DSL配置

  • 查询过滤:条件模板驱动

2、在Python开发中实现无代码、纯配置的业务界面展示和常规数据操作

有了上面的EAV知识的介绍,我们可以来进一步探讨在Python开发中实现无代码、纯配置的业务界面展示和常规数据操作过程了。

我们先来看一个界面下效果。

对于这样一个常规的列表展示界面,包括有条件查询、分页列表记录展示,属性类型,包括文本、整数、浮点小数、日期、备注长文本等类型录入,以及对应不同的数据类型,有下拉列表(固定的、动态字典的)、复选框、评分、弹出选择、映射关联属性等多种方式的录入处理,也是比较常见的情况。

而对于条件,可以展开多个条件,展开效果如下所示。

而对于数据的录入,有弹出界面处理方式,也有对应直接编辑列表的方式,直接编辑输入比较快捷,如果能够丰富录入的控件处理,那么也是非常好的一种数据编辑方式。

因此我们直接在列表中进行数据的编辑处理,提供不同类型、不同方式的输入处理,如下面是动态字典,通过下拉列表或者单选框的方式进行录入。

而对于一些系统用户、角色、机构,我们应该也可以弹出来选择记录,并更新关联的字段信息

列表界面一般为了方便,会提供相关的右键菜单,提供常规的操作处理。

而有些业务表是主从表的方式进行展示,如对应报价单、订单等常规的数据,通过主从表的方式会更加合适。

主表可以直接录入外,明细表也通过直接录入的方式,通过选择产品,可以快速的实现数据记录的选择,以及对相关字段属性值的复制,非常方便。

3、配置业务界面处理

如果要实现上面业务界面的展示处理,那么我们需要如何配置业务界面元素呢。

通过上面的EAV介绍

那么我们至少围绕上面几个信息来定义和存储数据内容,在更高的层次上定义好相关的信息:

1)实体类是否分页、是否有主从表关系。

2)属性定义,需要包括是否可以查询(作为条件)、是否可用(显示与否)、属性类型(决定存储位置)、控件输入方式(日期、数值、文本),而其中文本最为灵活,可能是通过配置字典(动态或者固定列表),选择系统表方式获取,选择动态业务表对象,通过编码规则生成编码等方式,数值可能是常规数值输入、评分输入、或者复选框等方式。另外还有是否必填、是否只读,排序顺序等关键定义

3)属性值的存储,根据不同的数据类型,存储在不同的表中,提高处理效率的同时不会降低精度。

4)属性信息的提取,这个非常关键,如果把这些数据每次组合起来,那么常规的做法就是关联多个表来实现数据的联合,但是效率会非常低下。好的做法可以利用NoSQL的动态文档的特点,对数据的组合通过MogoDB的方式实现快速检索处理,存储的时候,一份完整的记录存储在MongoDB,另外一份数据写入具体的属性值表中,必要时可以随时实现同步即可。

有了上面的几点介绍,我们来看看具体在Python中如何管理这些内容。

如上面顶部为实体(或实体类型)的定义信息,主要包括名称、模型类名、是否分页几个属性。

下面是对应实体类型的属性列表,其中属性名称、模型类型名、存储类型,为核心信息,其他必填、排序、字典类型、只读、隐藏、可查询 等等属性定义为一些构建界面必须的相关属性。

这两个表可以通过直接编辑模式进行快速录入,从而方便动态定义实体类型和相关的属性列表。

另外通过定义从表,可以从系统的动态定义实体类型中选择业务表作为从表信息,如下对于订单或者报价单的业务,通过主从表的方式显示的,定义界面如下所示。

而对于一些属性字段的输入类型,我们提供一些内置的选项供选择。

如前面介绍的选择用户方式,就从基础用户表中选择记录,更新关联的字段信息。

而如果选择类似系统业务编码的,那么也提供一个编码生成的方式(结合业务编码模块规则生成编码),如订单中的订单编码记录,新增的时候,提供一个按钮可以结合订单编码规则生成编码。

而对于常规的字典,我们可以通过配置字典类型,就可以实现字段和系统字典项目的关联了。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/3 1:19:34

剑指offer-62、⼆叉搜索树的第k个结点

题⽬描述给定⼀棵⼆叉搜索树,请找出其中的第 k ⼩的 TreeNode 结点。示例1 输⼊:{5,3,7,2,4,6,8},3 返回值:{4}思路及解答二叉搜索树的关键性质二叉搜索树具有一个重要特性:中序遍历(左-根-右)BST会得到一个…

作者头像 李华
网站建设 2026/7/2 8:07:17

codex、ccswitch卸载干净后重装配置deepseek

1.卸载ccswitch ①若ccswitch是通过文件.msi下载的,则进入控制面板,选择程序和功能,点击ccswitch卸载; ②进入目录C:\Users\用户名\,删除.cc-switch 2.卸载codex ①在电脑左下角找到codex,右击卸载 ②…

作者头像 李华
网站建设 2026/7/1 2:42:29

社会实践PPT制作指南:优质工具平台与实用技巧

一、社会实践 PPT:为何选择合适模板很重要在大学生活中,社会实践是极为重要的一环。它不仅能让我们走出校园,亲身体验社会的多样性,将所学知识应用于实际,还能锻炼我们的沟通能力、团队协作能力和解决问题的能力 。而当…

作者头像 李华
网站建设 2026/7/1 2:41:45

Java毕设选题推荐:基于 SpringBoot 的农户农产品展销助农平台的设计与实现 基于 SpringBoot 的智慧农商便民服务平台【附源码、mysql、文档、调试+代码讲解+全bao等】

博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围:&am…

作者头像 李华
网站建设 2026/7/1 2:40:12

噬菌体展示技术:抗体库构建、靶点筛选与靶向分子开发核心平台

噬菌体展示技术是将外源多肽、蛋白、抗体可变区等基因序列融合至噬菌体衣壳蛋白基因中,使外源分子表达并展示于噬菌体颗粒表面,依托抗原 - 抗体特异性亲和作用,通过多轮 “吸附 - 洗脱 - 扩增” 富集阳性噬菌体克隆,实现特异性靶向…

作者头像 李华