用 id 而不是 字符串形式存储字段的好处 ---摘自 《设计数据密集型应用》

图2-1

上面的表结构中 ,region_id 和 industry_id 是以ID,而不是纯字符串“Greater Seattle
Area”和“Philanthropy”的形式给出的。为什么?

如果用户界面用一个自由文本字段来输入区域和行业,那么将他们存储为纯文本字符串是合理的。另一方式是给出地理区域和行业的标准化的列表,并让用户从下拉列表或自动填充器中进行选择,其优势如下:

  • 各个简介之间样式和拼写统一避免歧义(例如,如果有几个同名的城市)
  • 易于更新——名称只存储在一个地方,如果需要更改(例如,由于政治事件而改变城市 名称),很容易进行全面更新。
  • 本地化支持——当网站翻译成其他语言时,标准化的列表可以被本地化,使得地区和行 业可以使用用户的语言来显示
  • 更好的搜索——例如,搜索华盛顿州的慈善家就会匹配这份简介,因为地区列表可以编 码记录西雅图在华盛顿这一事实(从“Greater Seattle Area”这个字符串中看不出来)

存储ID还是文本字符串,这是个副本(duplication)问题。当使用ID时,对人类有意义的信息(比如单词:Philanthropy)只存储在一处,所有引用它的地方使用ID(ID只在数据库中有意义)。当直接存储文本时,对人类有意义的信息会复制在每处使用记录中。
使用ID的好处是,ID对人类没有任何意义,因而永远不需要改变:ID可以保持不变,即使它标识的信息发生变化。任何对人类有意义的东西都可能需要在将来某个时候改变——如果这些信息被复制,所有的冗余副本都需要更新。这会导致写入开销,也存在不一致的风险(一些副本被更新了,还有些副本没有被更新)。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值