gpt4 book ai didi

database - 讲解db标签存储方式

转载 作者:搜寻专家 更新时间:2023-10-30 21:45:33 28 4
gpt4 key购买 nike

来自这篇文章What is the most efficient way to store tags in a database?

建议这样存储标签表。

Table: Item
Columns: ItemID, Title, Content

Table: Tag
Columns: TagID, Title

Table: ItemTag
Columns: ItemID, TagID

另一个 SO 帖子说了同样的话。谁能解释为什么标签应该这样存储?我猜 ItemID 是一些内部 val,title 是标签名称(c++、sql、noob 等)内容是我想与我的项目一起存储的任何其他数据。为什么不是像

Table: Item
Columns: ItemID, Title, <more data i want>

Table: TagList
Columns: ItemID, Title

项目中的标题是“项目名称”,标签标题是“c++”“sql”“noob”“etc”

最佳答案

您展示的第二个设计没有任何问题,即带有 TagList 表的设计,只是它占用了更多空间。

也就是说,如果你用标签“database-design”标记了 10,000 个项目,那么在双表设计中,你必须将该字符串存储 10,000 次。如果空间效率更重要,你可以使用三表设计,它只会存储“数据库设计”的 4 字节整数 ID 10,000 次。节省 10 * 10,000 字节。

另一个区别是,在三表设计中,您可以在 Tag 表中有多行具有相同的字符串,即使它们具有不同的整数 ID 值。所以在 ItemTag 表中,它们看起来是不同的标签,您永远不会知道它们实际上被标记为相似的。而在双表设计中,具有相同拼写的标签隐含地组合在一起。

还有一点:如果你需要改变标签的拼写,那么在双表设计中你必须更新很多行。在三表设计中,您只需要更新一行。

最后,如果你通常需要一个唯一标签列表,在三表设计中查询Tags表会更快,而不是需要一个SELECT DISTINCT tag FROM TagList 每次您需要唯一列表时。后者只为您提供正在使用的标签列表,而不是所有符合条件的标签的列表。

关于database - 讲解db标签存储方式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/449517/

28 4 0