【问题标题】:Using a foreign key in Oracle SQL to display text data在 Oracle SQL 中使用外键显示文本数据
【发布时间】:2012-05-01 05:31:11
【问题描述】:

Oracle SQL 的新手,我认为这是一个非常直接的问题,但我找不到直接的答案。我的数据库中有一个员工表。其中一列是“emp_state”,用于显示员工居住的州。我还有一个“客户”表和一个“办公室”表,它们也都有一个“状态”字段。为了减少数据库中的冗余数据量,我创建了一个“状态”表,其中包含具有相应 ID 的所有状态。我想在提到的其他表中引用此表。在设置我的表时,我应该在相关表中定义什么作为外键?应该是“State_id”还是“State_name”?我希望状态名称出现在任何运行的查询中,而不是状态 ID,这对用户来说毫无意义。

谢谢!

【问题讨论】:

    标签: sql oracle10g foreign-keys


    【解决方案1】:
    • 您应该使用 state_id。如果在INT 上比join 快得多,那么在VARCHAR 上。
    • 如果你需要一个州的名字,你应该在桌子上JOIN并得到它
    • 如果您计划更新州名,那么您需要更新所有相关表。如果您有 id,那么您只需要更新 name 列。
    • 您可能不会有两次相同的州名。但如果你这样做呢?然后您必须更改它或在州名称上附加一些奇怪的数字。

    所以底线:始终使用 id

    【讨论】:

    • 用新的 state_id 替换现有的状态列。这可能需要几次迭代,具体取决于原始数据的“脏”程度。
    • 是的。但是使用 int id 而不是 varchar forenkey 的好处值得不便
    • 哦-我完全同意...(因此赞成)我只是扩展了您将构建一个新的 (int) 列来替换旧的 (varchar) 列的想法-然后更新破解原始 ID 之前的 ID 值...
    • 这是我正在寻找的 JOIN。那是我缺少的链接。因此,我将“emp_state”指定为 NUMBER 列,并将其设置为与“state”表上的“state_id”相关的外键。感谢您的 Arion 编辑:我不必更改我处于设计早期阶段的任何旧列。想要从一开始就做好!
    猜你喜欢
    • 1970-01-01
    • 2022-01-17
    • 1970-01-01
    • 2010-09-26
    • 1970-01-01
    • 2011-03-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多