sql - Postgresql:一列表的主键

标签 sql postgresql database-design

有时,应用程序中的某些表每个表中只有一列。各个列中的记录数据是唯一的。例如:国家/地区名称表、产品名称表(例如,最长 60 个字符)、公司代码表(3 个字符长,由用户确定)、地址类型表(例如,帐单、交货)等

对于这样的表,由于记录是唯一的且不为空,从技术上讲,唯一的列可以用作主键。

所以我的问题是,使用该列作为表的主键是否足够好?或者,是否仍然需要添加另一列(country_id、product_id、company_id、addresstype_id)作为表的主键?为什么?

预先感谢您的任何建议。

最佳答案

使用代理键和复合键作为主键之间始终存在争议。使用复合主键总是会给数据库设计和应用程序带来一些复杂性。

认为您有另一个表需要与您的结果表(计费表)之间有直接关系。对于复合键场景,您的相关表中需要有 4 列才能与计费表连接。另一方面,如果您使用代理键,您将拥有一个身份列(简单),并且您可以对(country_id,product_id,company_id,addresstype_id)创建唯一约束

但很难说这种方法比另一种方法更好,因为它们都有优点和缺点。

您可以查看This了解更多信息

关于sql - Postgresql:一列表的主键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54722834/

相关文章:

sql - Golang gorm - 在不使用预加载的情况下获取关系

sql - ADODB RecordSet RecordCount 不返回有用信息

postgresql - 基于用户登录openbravo的只读逻辑

SQL - 如何根据值执行计算

sql - Postgresql 选择一系列由给定间隔隔开的记录

database - 在 postgresql 中加入两个选择查询

postgresql - 对在 postgresql 中使用 array_agg 创建的文本聚合进行排序

mysql - 如何不重复存储在数据库中的值

sql - 是否可以在没有 sql server 代理的情况下自动运行存储过程?

r - 转换数据集(相似性评级)