gpt4 book ai didi

mysql - 我应该为唯一名称表中的每一行提供行 ID 吗?

转载 作者:行者123 更新时间:2023-11-29 00:37:27 25 4
gpt4 key购买 nike

我需要一些最佳实践和性能建议。

假设我有三个表:Employees、Jobs 和 Ranks。每个员工都有一份工作和一个等级,所以显然我应该在我的 Employees 表中引用这些表。

我的问题是,以下哪个选项最好:

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 语句上节省了时间

<编辑:>

澄清一下,我主要关心的是如果我需要使用多个 JOIN 而不是一个执行 SELECT 时我必须处理的性能SELECT 语句。

我希望能够处理大量流量 - 具体来说,员工请求查看他们的职位和等级。

<编辑>

例子:

选项 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。

最好的做法是始终为每张 table 准备这个。通常称为 'id' 或 the-table-name_id'

它应该没有商业值(value)。

许多“保证唯一”的记录后来发现需要或存在或重复的记录,并且始终拥有唯一的主键在满足/发现时有很大帮助。

“唯一”的一个例子……那不是……如果一个系统有人们的社会安全号码,它们应该是唯一的。但是,可能会打错。然后,当具有“错误输入”值的人出现并且他们的号码被绑定(bind)输入时......在允许/解决这个问题时,这将非常有助于所有行拥有自己的 id,该 id 不是 ssn 并且没有商业值(value)除了标识行之外的所有内容。

唯一记录是一个众所周知的问题。为所有记录设置唯一 ID 是解决该问题的解决方案的一部分。

上述所有情况的异常(exception)是性能。我不太关心几千条记录的连接速度,因为 SQL 数据库经过精心设计以提高速度。我发现唯一标识的优势胜过劣势。可能会出现你因为性能需求而改变上述做法的情况。例如,如果有数百万条记录必须加载到内存中,唯一 ID 空间的开销可能会成为一个问题。通常,如果出现这些情况,人们就会开始关注无 SQL 解决方案,例如 Redis、MongoDB 等。

这里有一些关于 SO 和其他网站的额外引用:

What's the best practice for primary keys in tables?

in general, should every table in a database have an identity field to use as a PK?

http://www.sql-server-performance.com/forum/threads/do-i-need-a-unique-identifier-or-identity-column.16910/

is an ID column really needed in SQL?

正如在一个答案中评论的那样“在社区中使用自然键与代理键进行某种宗教辩论”。还有一条评论是关于回答者如何获得他们的“规则”的……嘻嘻……

关于mysql - 我应该为唯一名称表中的每一行提供行 ID 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13669693/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com