我一直在与一个团队合作,他们建立了一个系统,他们在这个过程中创造了一些新术语,我想知道他们是否应该称之为更标准化的东西。
基本上,他们有保存版本信息的表,所以表的唯一键是被跟踪文档的标识符,加上记录号(尽管记录号是自动编号的,所以它本身是唯一的)。它们将构成文档标识符的字段(它因每个表而变化)称为“主键”......唯一标识符,他们可能互换指为“一个首要键”和A / B / C为“的首要键”
如果他们有一个规范化的数据库,这将是外键的明显候选者——但它没有规范化,所以它不是对不同表的引用。
这个概念有什么名字——一个标识符来选择一些不是表所基于的概念,但不是外键?
更新:它不是备用键,因为它不标识表中的唯一记录;它标识一组记录。看下表:
id document_id version_no
-- ----------- ----------
1 1 1
2 2 1
3 1 2
4 2 2
5 2 3
Run Code Online (Sandbox Code Playgroud)
因此,我们正在跟踪 5 个对象的元数据,它们是两个不同的文件,其中一个已更新一次(它的 2 个版本/版本),另一个已更新两次。
我们有以下几点:
...如果document_id
是与另一个表的关系,它将是一个外键,但“外键”通常也推断出一个约束(即,该值必须存在于其他某个表中才能在此处使用).. . 但在这种情况下,它不是。那么,是否有其他术语可以将其描述为从表中选择相关对象分组而不是单个记录?
维基百科页面上代理键适合的第一个定义,但这不是该术语的常见用法,大多数人认为代理键适合第二个定义:
更新 2:基本上,如果您有一个处理记录版本控制的表,如果您将记录移动到新表并存储编辑历史记录,则链接回原始表的字段将被视为外键……但是如果您将所有内容都存储在一个表中,而与辅助表无关,是否有标识记录多个版本的字段组的名称?
我问的原因是与我一起工作的小组决定称其为“主键”,当我加入时,我查看了他们的所有文档,并告诉他们他们有一个错字,这是'primary key',但他们解释说不,这是他们创造的用来描述这个概念的短语。
我正在尝试确定数据库社区中是否存在针对此概念的公认名称。
用户术语将主键的代理键和自然键作为变体。
代理键:
代理键是没有“业务”含义的键,仅用于标识表中的记录。此类键要么是数据库生成的(例如:SQL Server 中的标识、Oracle 中的序列、DB2 UDB 中的序列/标识等)要么是系统生成的值(例如通过模式中的表生成)。
自然键:
如果键代表的属性用于独立于数据库模式的标识,则键是自然的。这基本上意味着,如果人们使用它们,密钥是自然的,例如:发票号码、税号、SSN 等。
“候选键”是可以唯一标识表中记录的任何列或列的集合。
“主键”是定义为表主键的候选键。
在内部,主键只是一个唯一索引,聚集或非聚集,通常用于外键关系。
与往常一样,还有更多内容,但我希望这会有所帮助。