gpt4 book ai didi

使用嵌套集/邻接表进行用户标记的数据库模式

转载 作者:搜寻专家 更新时间:2023-10-30 19:46:08 27 4
gpt4 key购买 nike

我看过很多关于为对象标记构建数据库模式的帖子(例如 dlamblin's postArtilheiro's post)。

在我多年的研究中,我似乎无法找到的是实现允许将标签分配给用户的标记模式的模式逻辑(例如 LinkedIn 的 Skills and Expertise 系统,其中已添加的标签用户可以索引和搜索)。这可能就像将有问题的“对象”更改为用户一样简单,但我觉得它比这更复杂。

我希望能够构建几乎与此完全相同的东西,但类别除外。例如,如果我们采用 LinkedIn 的一些技能并将它们分类,我们可能会有类似:IT/计算、零售、项目管理等。

我知道有几种常用的数据分类方法和架构,特别是Nested SetAdjacency List。我听说过很多关于这两者的事情,例如“嵌套集的插入和删除是资源密集型的”,以及“邻接表模型很笨拙、有限,并且不能覆盖无限的深度。”

所以我在一篇文章中包含了两个问题:

  • 粗略示例模式在标记用户技能方面是什么样子的,可以在其中对用户进行索引和搜索,甚至能够为特定的用户构建用户池标签?

  • 根据分类的必要性,对这种性质的事物进行分类的最佳方法是什么?

  • 是否还有其他我不知道的更适合这种情况的模型? (哎呀,我觉得是三个问题)

最佳答案

What is the best to way to categorize something of this nature in light of the necessity to have categorization?

取决于您需要多大的灵 active 。例如,如果您可以假设您的类别层次结构的深度有一个固定的限制,例如 1 或 2 级,则邻接列表可能非常好。

Are there any other models that would suit this better that I am unaware of?

路径枚举 是一种在祖先名称的串联列表中表示层次结构的方法。因此,每个子类别标签不仅会命名其自己的名称,还会命名其父项和任何进一步的祖 parent ,直至根。

你已经熟悉了任何shell环境中的绝对路径名:“/usr/local/bin”是“usr”、“local”、“bin”的路径枚举,它们之间的层次关系按顺序编码的字符串。

这个解决方案也有数据异常的可能性——你有责任为“/usr/local”和“/usr/local/bin”创建一个条目,如果你不这样做,有些事情就会开始崩溃.

What would a rough example schema look like in regards to tagging skills to users, where they can be indexed and searched, or even be able to construct a pool of users for a specific tag?

在数据库中实现这一点几乎与单独命名标签一样简单,但它要求您的标签“名称”列足够长以存储层次结构中的最长路径。

CREATE TABLE taguser (
tag_path VARCHAR(255),
user_id INT,
PRIMARY KEY (tag_path,user_id),
FOREIGN KEY (tag_path) REFERENCES tagpaths (tag_path),
FOREIGN KEY (user_id) REFERENCES users (user_id)
);

索引与简单标记完全相同,但如果从层次结构的根部指定整个字符串,则只能搜索子类别标记。

SELECT user_id FROM taguser WHERE tag_path = '/IT/Computing'; -- uses index

SELECT user_id FROM taguser WHERE tag_path LIKE '%/Computing'; -- can't use index

关于使用嵌套集/邻接表进行用户标记的数据库模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16182769/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com