【问题标题】:Use string as primary key to store words使用字符串作为主键存储单词
【发布时间】:2021-03-09 16:05:33
【问题描述】:

我计划创建一个巨大的表来存储所有可能存在的用于个人实验的单词(无论是官方词典的一部分,城市还是其他)。

将单词本身用作主键是否有意义? 100% 确定单词必须是唯一的,而且它们不会改变。

最终的目的是在相关表中也使用这个PK作为FK,以获得关于这些单词的更多信息。

我对表格缩放不太熟悉,所以不知道我是否会遇到麻烦:

  • 性能方面
  • 如果表变得太大并且必须分区 (?)
  • 如果我想将数据库移动到 sqlite 以用作嵌入式数据存储

用 postgres(我当前的数据库)标记这个问题,但可能会迁移到 sqlite。

【问题讨论】:

    标签: sql postgresql sqlite


    【解决方案1】:

    另一个想法:

    制作 2 列

    • 第 1 列:首字母
    • 第 2 栏:单词

    [如果单词是APPLE :::: Column1-->A :::: Column2-->Apple]

    好处:

    • 您可以更快地查询诸如“从一个字母计算字数”之类的任务(例如,A 中的字数)
    • 可以为您提供制作分片的简单规则(就像所有以 column1 为“A”的单词一样,可以将其分配给特定的专用分片)

    【讨论】:

    • 可以,但首字母不是主键
    【解决方案2】:

    如果您需要对表进行分区的字数足够多,我会感到惊讶。当然,如果你的“文字”真的是基因序列之类的,我可能就不在那儿了。

    无论如何,primary key 的主要目的之一是支持外键关系。因此,如果另一个表可能会引用此表,那么您需要考虑到这一点。

    整数外键通常更可取,因为它们的长度是固定的——这对于索引来说效率更高一些。此外,四字节整数可能小于平均字长,因此它们也节省了外键的存储空间。

    这将与words 表本身中的额外 4 个字节相平衡。总的来说,我通常会添加合成主键。

    【讨论】:

    • Sorrgate 键。谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-05-04
    • 1970-01-01
    • 2020-03-16
    • 2011-01-27
    • 2020-03-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多