多维数据库设计实现

最近看到不少针对与多维数据库的技术文章。也把这方面个人的经验分享一下。

做了几年的多维数据库存储实现设计,最主要从两个方面考虑。

1.元模型

任何数据库产品的底层设计都离不开元模型,这部分不深入讨论,有兴趣的可以去OGM官网查看关于建模方法论。虽然有点晦涩,但是这个是做这个的基础。下面提供一个简单的建模思路:

Model(用于描述表对象)

Property(用于描述表字段)

OneToOne: ER 1对1

OneToMany : ER 1对多

ManyToMany: ER 多对多

ManyToOne : ER 1对多

利用上面的元模型就可以构建我们传统的数据关系了。

User(Model)

Name(Property):kind-Name,datatype-String, Length-20,name-用户名称。。。

Aeg(Property):kind-aeg , datatype-Integer, length-3, name- 年龄。。。

UserId(Property-唯一):kind-UserId, datatype-String, length-8, name - 用户ID

User与Peyment关系: ER 1对多- OneToMany

Payment(Model)

PayName(Property):kind-PayName,datatype-String, Length-20,name-工资类型名称。。。

PayType(Property-唯一):kind-PayType,datatype-String, Length-20,name-工资类型CODE。。。

amount(Property):kind-amount,datatype-decimal, Length-normal,name-工资额。。。

我们看一下多维数据表的设计实现:

这里有一个很重要的概念就是树

首先思考下面的树状结构数据

1. |─ a

2. | |─ d

3. | | └─ p

4. | | └─ q

5. | | └─ r

6. | └─ e

7. | └─ f

8. |─ b

9. | └─ x

10. | └─ y

11. | └─ z

12.└─ c

针对上面树形结构数据存储,要满足下面的需求:

1. 每个节点要可以动态增减

2. 每个节点的结构存在差异

3. 提供对这棵树所有节点的增删改查能力

要可以容纳所有的父子孙节点,他们之间的结构存在差异,提供统一的增删改查。

idkinparent_idpath
1a-1
8b-8
12c-12
2d11-2
6e11-6
7f11-7
9x88-9
10y88-10
11z88-11
3p21-2-3
4q21-2-4
5r21-2-5

这里面的path实际上就是对应节点到根节点的路径。

于是,在一个给定节点d的时候,

1. 查找d的所有子孙节点:Orientation_id like "d.Orientation_id%"

2. 查找某个节点的所有子节点:Orientation_id like "d.Orientation_id%"

and Parent_id=d.id

idtypeparentidkindValuebusinessPathmetapath
/UsermodelrootUser-.10010011.
/nameproperty/Username张三.10010011./User/name
/ageproperty/Userage22.10010011./User/age
/UserId(唯一)property/UserUserId10010011.10010011./User/UserId
/Paymentmodel/UserPayment-.10010011./User/Payment
/PayNameproperty/PaymentPayName基本工资.10010011.01./User/Payment/PayName
/PayType(唯一)property/PaymentPayType01.10010011.01./User/Payment/PayType
/amountproperty/amountamount5,000.10010011.01./User/Payment/amount
下面可以追加其他工资类型的数据以及其他员工的数据

对于该表的增删改查,实现思路有别与传统思路,需要借助path列BisinessPath列以及其他辅助字段组合。有兴趣的可以自己研究一下。

微信号:chljapan 附注:多维数据库实践

转载请注明出处,原创不容易。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值