Database design 当候选键和复合键选项都可用时,在RDBMS表中创建主/唯一ID的最佳实践是什么?

Database design 当候选键和复合键选项都可用时,在RDBMS表中创建主/唯一ID的最佳实践是什么?,database-design,relational-database,database-normalization,composite-key,candidate-key,Database Design,Relational Database,Database Normalization,Composite Key,Candidate Key,情景: -有两个部门,即“软件”和“硬件”。 -他们在软件部门有“Cobol”、“Fortran”、“Pascal”、“QBasic”等部门。 -以及硬件中的“RAM”、“硬盘”、“监视器”、“CPU” 部门 -下表为部门和部门的表格格式 分区表 使用的数据库:Oracle 表1:部门表 表2:上述部门的部门表格式1-主键/唯一Id列=Div\u Id 表2:上述部门的部门表格式2-主键/唯一Id列=部门Id+部门Id 在上述两种分区表格式中,我无法找到优点和缺点。那么,在这些格式中,创建主/唯

情景: -有两个部门,即“软件”和“硬件”。 -他们在软件部门有“Cobol”、“Fortran”、“Pascal”、“QBasic”等部门。 -以及硬件中的“RAM”、“硬盘”、“监视器”、“CPU” 部门 -下表为部门和部门的表格格式 分区表

使用的数据库:Oracle

表1:部门表

表2:上述部门的部门表格式1-主键/唯一Id列=Div\u Id

表2:上述部门的部门表格式2-主键/唯一Id列=部门Id+部门Id

在上述两种分区表格式中,我无法找到优点和缺点。那么,在这些格式中,创建主/唯一ID的最佳实践是什么?为什么最好


使用select query时,两种格式之间是否存在性能差异?

您可以使用一列作为主键,如格式1所示,或者使用组合主键,如格式2所示。对于我来说,格式1是一种选择,因为:

每个记录都有自己的id,可以通过select通过它访问,只需使用一列,您就可以将另一个表链接到此字段外键 用于生成id的数据库的一个常见实现是从格式1开始的,只是一个数字,否则您必须在应用程序中对此进行排序或编码 格式2有一个魅力,你可以为每一项和每一个部分都设置一个数字1等等,但是确实要关心数字,如果你需要这样的东西,你应该选择一个单独的表格,如果你想计数,应该使用count*而不是getMax;- 如果您想从部门1或部门2中选择所有项目,则没有区别
所以我选择格式1,它是最实用的解决方案

格式2与我选择的很接近。不过,主键不仅仅充当唯一的列。它还可以加强数据完整性,并帮助解释表的作用


帮助我把事情弄清楚。

格式1更简单,而不是更可靠。您可以将前两个原因简化为单个列键,这比组合键更简单。另外,我基本上同意你的答案。谢谢你指出,为了更方便,更新了答案。复合钥匙没有问题,但在这种情况下,它似乎是人为的。请。仅为方便补充文本和/或为文本中无法给出的内容使用图像。候选与复合不是一个有意义的选择。有时是复合的。我们得到CKs,然后选择一个作为PK。在您的标题中,您的意思是,当简单和复合CK选项可行时?你要的桌子先到。然后你就决定了。然后你选择一个PK。这里给出了每个表和FDs的常识,每个表中只有一个CK。所以你别无选择。你的意思是,选择哪种设计/桌子?那么,如何确定业务部门?您的表2似乎与您的业务不符。