[英]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.