在Oracle SQL中使用外键显示文本数据

在Oracle SQL中使用外键显示文本数据,sql,oracle10g,foreign-keys,Sql,Oracle10g,Foreign Keys,我对Oracle SQL还不熟悉,我认为这是一个非常直截了当的问题,但我找不到直接的答案。我的数据库中有一个employees表。其中一列是“emp_状态”,用于显示员工所在的状态。我还有一个“Customer”表和一个“office”表,它们都有一个“State”字段。为了减少数据库中的冗余数据量,我创建了一个“State”表,其中包含具有相应ID的所有状态。我希望在前面提到的其他表中引用此表。设置表时,我应该在相关表中将什么定义为外键?它应该是“State\u id”还是“State\u n

我对Oracle SQL还不熟悉,我认为这是一个非常直截了当的问题,但我找不到直接的答案。我的数据库中有一个employees表。其中一列是“emp_状态”,用于显示员工所在的状态。我还有一个“Customer”表和一个“office”表,它们都有一个“State”字段。为了减少数据库中的冗余数据量,我创建了一个“State”表,其中包含具有相应ID的所有状态。我希望在前面提到的其他表中引用此表。设置表时,我应该在相关表中将什么定义为外键?它应该是“State\u id”还是“State\u name”?我希望状态名称出现在运行的任何查询中,而不是对用户来说毫无意义的状态ID

谢谢大家!

  • 您应该使用state_id。如果在
    INT
    上加入
    要快得多,那么就使用
    VARCHAR
  • 如果您需要一个状态的名称,您应该
    在表上加入
    ,并获取它
  • 如果计划更新状态名称,则需要更新所有相关表。如果您有一个id,那么您只需要更新name列
  • 您可能不会有两次相同的州名。但是如果你这样做呢?然后您必须更改它或在州名称上附加一些奇怪的数字

因此,底线是:始终使用id

将现有状态列替换为新的状态id。这可能需要几次迭代,具体取决于原始数据的“脏”程度。True。但是使用int-id而不是varchar-forenkey的好处是值得的——我完全同意。。。(因此upvote)我只是扩展了一个想法,即您将构建一个新的(int)列来替换旧的(varchar)列-然后在破坏原始列之前更新ID值…这就是我要寻找的连接。这就是我丢失的链接。因此,我将“emp_state”指定为数字列,并将其设置为与“state”表上的“state_id”相关的外键。谢谢你对Arion的编辑:我不需要修改任何旧的专栏,因为我正处于设计的早期阶段。想从一开始就做好!