简介
定义一种通用的属性体系,可以表示任何实体的属性,同时也像数据库列一样,可以为属性指定数据类型.在电商系统中,
每个商品都有多个属性,并且这些属性不能提前设定,它们以无模式的key/value形式存在,我们可以简单的只保存key/value,
也可以把这种需求抽象成更通用,功能更强大的属性体系,这样就可以适用更多的场景.
数据库
property_key: 属性key
property_key_definition:属性key定义,就好像MySQL column definition
property_value:属性值
数据库解析
-
property_key表的owner_type和owner_identifier这两个字段唯一确定一个实体,这种开放的设计,可以表示任何实体,因此,这种设计可以表示任何实体的属性,比如商品的属性,店铺的属性等等
-
像定义MySQL table column一样,可以为属性设置definition,查看property_key_definition表的设计,以及这个表的data_type字段
-
查看property_key的type字段,为属性定义type。假设一件衣服有【颜色=红色】,【尺寸=大】两个属性,在页面上显示时,我们可以直接显示这样的文字,但是如果【颜色】这个属性不显示文字,而是显示真实的颜色呢?这个时候,假设【颜色】这个属性设置type=color,属性值设置为#FFFFFF,那么UI程序根据约定好的type的定义就知道这个属性应该显示真实的颜色,而不是字面量#FFFFFF了。再比如属性是链接type时,前端界面就可以以Url的形式显示,如果属性是图片type时,前端界面就显示图片,等等。所以属性有了type,设值和显示时体验就更好了。
-
换个角度思考,可以当作系统变量。环境变量等功能使用只要把属性的owner设置成系统即可。
程序设计
数据类型以插件模式开发,默认实现了MySQL相关的数据类型,使用者也可以实现自己的数据类型。
DataType接口定义数据类型,比如MySQL的Varchar;DataTypeHandler接口,用于处理数据类型,每一个数据类型对应一个Handler。
数据库原文件
github地址:Java中台项目,数据库设计文件是【】