【发布时间】:2012-12-02 13:26:02
【问题描述】:
我需要一些最佳实践和性能建议。
假设我有三个表:Employees、Jobs 和 Ranks。 每个员工都有工作和等级,所以显然我应该在员工表中引用这些表。
我的问题是,以下哪个选项最好:
1) 每个工作和排名都存储有一个唯一的 ID,并与描述性名称配对。 Employees 表应该引用另一个表中的唯一 ID,从而节省内存(描述性名称仅在 Jobs/Ranks 表中保存一次),但要查看描述性名称,我需要执行 JOINs:
SELECT Employees.EMPL_ID, Ranks.R_NAME, Jobs.J_NAME
FROM Jobs
JOIN Ranks ON Ranks.R_ID=Employees.RANK
JOIN Jobs ON Jobs.J_ID=Employees.JOB
2) 只是唯一的描述性名称。这可能会浪费内存,因为我反复保存每个职级/工作的描述性名称,但我在 SELECT 语句上节省了时间
编辑:>
澄清一下,我主要关心的是,如果我需要使用多个 JOINs 而不是一个 SELECT 语句来执行 SELECTs,我必须处理的性能。
我希望能够处理大量流量 - 具体来说,员工请求查看他们的工作和排名。
编辑>
例子:
选项 1(ID 和名称):
Employees:
__________________________
/ EMPL_ID | RANK | JOB \
| 1 | 2 | 3 |
| 1 | 1 | 3 |
| 1 | 1 | 1 |
\__________|________|______/
Ranks:
__________________
/ R_ID | R_NAME \
| 1 | GRUNT |
| 2 | BOSS |
\________|_________/
Jobs:
____________________
/ J_ID | J_NAME \
| 1 | JANITOR |
| 3 | PRESIDENT |
\________|___________/
选项 2(唯一名称):
Employees:
_______________________________
/ EMPL_ID | RANK | JOB \
| 1 | BOSS | PRESIDENT |
| 1 | GRUNT | PRESIDENT |
| 1 | GRUNT | JANITOR |
\__________|________|___________/
Ranks:
__________
/ R_NAME \
| GRUNT |
| BOSS |
\__________/
Jobs:
___________
/ J_NAME \
| JANITOR |
| PRESIDENT |
\___________/
【问题讨论】:
-
你总是可以的,它永远不会伤害,而且有时会有所帮助。如果不确定,请添加数字 ID。
-
@JanDvorak:说“它永远不会痛”是不正确的,因为从另一个表中加入/查找值显然是有成本的。在大多数情况下,此类成本可能无关紧要 - 但它始终非零。