关于我问题的第一部分:我最近问自己,为关系数据库中的某些表设置唯一标识符有什么好处和权衡。例如,Facebook (FB) Graph API 允许使用相同的 URL 获取不同类型的对象,例如“用户”、“事件”、“页面”等,例如https://domain/251906384206返回一个“事件”类型的对象,而https://domain/195466193802264返回“组”类型的对象。
与提供不太“通用”的 API 相比,这种方法的好处是什么,API 将以这种方式使用:https://domain/event/251906384206或https://domain/group/195466193802264。在这种情况下,类似的标识符可能用于不同的对象类型,因为每个对象类型都有其标识符范围。
关于问题的第二部分:实现全球唯一标识符的选项有哪些?
我想到的两个选择是:
使用基于继承的方法(每类表、单个表等)。假设使用每类表的方法(超级表仅包含唯一标识符作为主键,表示对象类型的子表包含与超级表相同的标识符和附加数据),超级表和子表之间需要连接,这似乎很难扩展因为超级表成了瓶颈?
提供一个包含 3 列的表,其中包含
- 唯一标识符,
- 对象类型特定的主键,以及
- 表名。
每个对象类型的附加表包含将唯一标识符引用为外键的列。每个对象类型特定的表都有自己的主键范围。
这两种方法都允许提供像上面提到的 FB API 这样的通用 API。第二种方法将允许在内部使用对象表特定的主键并仅公开全局唯一标识符。但是,如果可能在内部使用全局唯一标识符,则第二种方法也需要连接。
是否有任何关于全球唯一标识符的优缺点的经验以及实施它的最佳实践是什么?