基于SalesForce 多租户架构 及 灵活字段的实现问题

lordpeas 2016-04-21 04:29:35
1:数据库设计
数据库设计是参照 salesforce 架构思想的元数据驱动方式:
核心表有三张:

Object Metadata表
这个表主要存储对象的信息,其中主要字段包括对象的ID(ObjID),拥有这个对象的租户的ID(OrgID)和这个对象的名字(ObjName)。
Field Metadata表:
这个表主要存储对象附带字段的信息,其中主要字段包括字段的ID(FieldID),拥有这个字段的租户的ID(OrgID),这个字段的名字(FieldName),这个字段的数据类型(datatype)和一个布尔字段(IsIndexed)来定义这个字段是否需要被检索,通过一个FildNum列在Data表中映射具体的数据源

mt_Data表
Data表的作用和Metadata表正好相反,它主要存储那些用户定制的对象和对象所包含的字段的数据,主要也包括两大类:
Data表:这个表放置着上面那些对象和字段所对应的数据,核心字段有全局唯一的ID(GUID),租户ID(OrgID),对象的ID(ObjID)和存放对象名字的”Nature Name(自然名称)”,比如这行和一个会计对象有关,这行的””Nature Name”字段可能是”Account Name”,除了这些核心字段之外,这个表还有名字从Value0到Value500的501个数据列来存储数据,而且这些列都是varchar的形式来承载不同类型的数据,这种数据列也被称为”flex列”。
Clob表:这个表主要存放那些CLOB(Character Large Object,字符大对象)数据,对象最大支持到32000个字符。

具体可参阅:http://dbanotes.net/arch/Salesforce_Multitenancy_arch_2.html
https://developer.salesforce.com/page/Multi_Tenant_Architecture(英文原版)
好处:
这种设计数据库的方式旨在实现租户可以自定义对象,自定义字段,并且避免了建表成本,
难点
传统的orm方式,类映射表的方式大概是行不通了。
对于这种数据库设计方式,不知道有什么好的封装数据的方案?
我目前只想到了用最传统的jdbc封装数据,返回集合。
不知道可不可以动态的创建类,动态的生成属性和get set 方法
或者有什么其他更好的数据封装方式呢?

另外,不知道有没有做过数据权限的大神,细粒度要求到了行权限和字段权限,针对这样的建表方式,该如何实现呢??

...全文
565 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
lordpeas 2016-04-25
  • 打赏
  • 举报
回复
求大神,求不沉
lordpeas 2016-04-23
  • 打赏
  • 举报
回复
别沉啊
lordpeas 2016-04-21
  • 打赏
  • 举报
回复
千万别沉了啊

67,513

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧