gpt4 book ai didi

Mysql规范化

转载 作者:可可西里 更新时间:2023-11-01 08:36:43 24 4
gpt4 key购买 nike

我有三个表

USER TABLE
userid username
1 alpha

Email TABLE
id userid email
1 1 alpha1@test.com
2 1 alpha2@test.com
3 1 alpha3@test.com

Phonenumber TABLE
id userid phonenumber
1 1 123456
2 1 123457
3 1 123458

如何使用单个查询获得以下结果

userid username email           phonenumber
1 alpha alpha1@test.com 123456
1 alpha alpha2@test.com 123457
1 alpha alpha3@test.com 123458

最佳答案

让我们从一个完全没有规范化的数据版本开始,并添加一些额外的、合理的数据,这样我们就可以看到规范化在这里是如何工作的。 (假设每个人都有至少一个电子邮件地址和一个电话号码,只是为了避免谈论 null。)

userid  username  email             phonenumber
1 Alpha alpha1@test.com 123456
1 Alpha alpha2@test.com 123457
1 Alpha alpha3@test.com 123458
2 Beta beta1@test.com 234567
2 Beta beta2@test.com 234567 (2 email addresses, 1 phone)
3 Gamma gamma1@test.com 234678
3 Gamma gamma1@test.com 234679 (1 email address, 2 phones)
4 Alpha alpha32@test.com 345678 (2 people, #1 and #4, with same name)

如果您仔细查看该数据,您会发现唯一的键是{email, phonenumber}

这就是为什么您无法只获得三行的原因——该键在您的表中无处可寻。这就是 @ontrack 所说的,“您的表格在电子邮件和电话号码之间没有唯一关系。”

按照任何数据库教科书中确定候选键的算法都会得到同样的结果。据我所知,每本数据库理论教科书都至少有一种算法来确定候选键。

显然,如果您有一个以 {email, phonenumber} 作为键的表,您只会得到 3 行用户 ID 1。

关于Mysql规范化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10041511/

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