database - 一个表可以有一个没有(自然)备用键的代理键吗?

标签 database database-design relational-database

我认为如果表有代理键而没有(自然)替代键是没有意义的(请记住,代理键的属性之一是它在数据库之外没有意义环境)。

例如假设我有下表:

enter image description here

假设 employee_id 是代理主键,表中没有(自然)备用键。

现在假设某个员工要更改他的电话号码,我们如何在表中找到该员工的记录?我们无法使用代理键来识别它,因为代理键在现实世界中是未知的(即我们不知道每个员工的 employee_id)。

因此表中必须有一个(自然的)备用键来标识现实世界中的每个员工(例如:SSN)。

我是否正确,还是我遗漏了什么?

最佳答案

你是对的。通常,数据库的用户需要能够将数据库表中的信息映射到数据库外的真实概念或事物。为此,他们需要一个可用的自然键 - 或者可以可靠地转换为自然键的东西。

您的具体示例不一定是好示例,因为许多(大多数?)组织会在员工任职期间为员工分配一个员工标识符。该雇员标识符可能为雇员和雇主所知并用作自然键。您在示例中说过 employee_id 是代理项,但根据其名称,许多人可能会认为它不是。

关于database - 一个表可以有一个没有(自然)备用键的代理键吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40713503/

相关文章:

sql-server - 如何测试 SQL Server 触发器中的多行操作?

android - 创建一个包含固定数量项目的 SQLITE 表

sql-server - 可选列中的空值

ruby-on-rails - 引用数据完整性: Necessity,不错,还是旧帽子?

mysql - 在 mysql 查询中使用 IN 检索行的替代方案

php - 使用关系 AR 检索 "OR"条件

mysql - 在sqlite中合并多个表

MySQL COUNT(id) WHERE 花费的时间太长

sql-server - 有没有办法链接/连接两个 MS SQL 数据库?

mysql - 数据库格式化的实现