繁体   English   中英

分布式内容类型的多租户标记架构

[英]Multi-Tenant Tag Schema's for Distributed Content Types

关于标记架构的讨论很多,但我注意到它大部分都集中在单个内容类型上,例如书签或照片。

我对跨多租户业务应用程序的多个功能使用标签感兴趣; 一种可以将标签与表单字段,文档,照片,配置设置等相关的标签。

我想设计一组较小的表来满足这些不同的需求,而不是为每种内容类型添加链接表,这会增加一些复杂性:

tags {
  tagsID
  tagName
}
tagChildren {
  childID
  childValue
}
tagType {
  typeID
  typeName
}
entity {
  entityID
  entityName
  ... 
}
tagMap {
  mapID  
  tagsID (FK)
  childID (FK)
  typeID (FK)
  entityID (FK)
}

tagMap可用于连接任意数量的这些项,但至少要连接至少tag和tagType。 例如,标签可以与下拉字段类型相关联。 它可以是具有注册表类型,子值的注册表项,并且可以与实体相关联。 标签子项可能是另一个标签,以允许多级父子关系。

分布存在风险,因为许多功能变得依赖于少量表。

如果您遇到类似决定的挑战,或者您有帮助的想法,请分享您的想法,方法以及绩效与分销风险之间的关系。

谢谢!

因此,Mark有一个很好的观点,但是,我们要避免使用多个标签表,以及标签本身固有的冗余性。 我们可以:

**Create a single Tags Table:**
  Tags { TagsID, TenantID, Name, CreatorID }    

**Documents:**
  TagMap_Documents { TagMap_DocumentsID, DocID, TagID }
  Documents { DocID, Location/Blob, ... }

**Photos:**
  TagMap_Photos { TagMap_PhotosID, PhotoID, TagID }
  Photos { PhotoID, URL, PhotoBlob ... }      

现在,我们引入了一个新问题-标签表已被规范化。 在Mark的场景中,在我自己的场景中,我们介绍了每个承租人和创建者或重载的承租人和创建者字段(单个记录中有多个ID)的多个标记名称的生成。

要解决此问题,我们可以:

  • 将实体和用户上下文转移到TagMap表,并联接到三个以上的表。 我认为这比我在最初的帖子中介绍的效率更高,因为我们已经分发了内容。

    创建单个标签表:标签{标签ID,名称}

    利用承租人和用户表承租人{TenantID,Name,...} Users {UserID,Name,...}

    文件: TagMap_Documents {TagMap_DocumentsID,DocID,TagID,TenantID,CreatorID}文件{DocID,位置/ blob,private(bit),...}

    照片: TagMap_Photos {TagMap_PhotosID,PhotoID,TagID,TenantID,CreatorID}照片{PhotoID,URL,PhotoBlob,private(bit),...}

  • 将实体和用户上下文转移到内容表(文档,照片)。 这里的问题是标签本身不是特定于实体或用户的,这会在自动完成/建议中产生干扰。

    创建单个标签表:标签{标签ID,名称}

    文件: TagMap_Documents {TagMap_DocumentsID,DocID,TagID}文件{DocID,位置/ blob,TenantID,CreatorID,private(bit),...}

    照片: TagMap_Photos {TagMap_PhotosID,PhotoID,TagID}照片{PhotoID,URL,PhotoBlob,TenantID,CreatorID,private(bit),...}

在这里寻找银弹,可能需要比整个狩猎更多的思考;)如果不是,那我们就不会有任何乐趣了:)

我不相信减少桌子数量会使事情更有效率。 对于每种内容类型仅具有单独的表是否更好? 它会更具可读性。 用更少的JOIN等来获取计数的查询也将更容易,更有效吗?

例如:

对于文档:

DocumentTags {ID TenantID名称CreatorID}

DocumentMappedTags {ID DocumentID DocumentTagID}

对于照片:

PhotoTags {ID TenantID名称CreatorID}

PhotoMappedTags {ID PhotoID PhotoTagID}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM