表A1:
zip(*lst)
表B1:
| id | name | code | level |
| 1 | Anton | A111 | 2 |
| 2 | Berta | A112 | 5 |
表B2:
| id | name | code |
| 1 | Anton | A111 |
| 2 | Berta | A112 |
哪个更合适?
使用表A1(级别列):
| id | code | level |
| 1 | A111 | 2 |
| 2 | A112 | 5 |
OR
按联接使用表B1和表B2(代码列):
SELECT 'id,name' FROM A1 WHERE level=2;
谢谢。
答案 0 :(得分:2)
对该问题的一般回答是,最好使用两个单独的表,而不是联合/组合版本A1
。原因是 normalizaion 的原理。考虑一种情况,其中给定的名称/代码与更多匹配的级别超过一个,例如此B2
:
| id | code | level |
| 1 | A111 | 2 |
| 1 | A111 | 3 |
| 1 | A111 | 4 |
| 2 | A112 | 5 |
现在加入将产生下表:
| id | name | code | level |
| 1 | Anton | A111 | 2 |
| 1 | Anton | A111 | 3 |
| 1 | Anton | A111 | 4 |
| 2 | Berta | A112 | 5 |
请注意,上表包含重复信息。我们将名称/代码复制/存储3次。实际上,如果使用两个表版本,则可以避免这种额外的存储成本。
使用A1
表的一个可能的理由是,如果您需要快速的闪电查询来提取信息,并且希望避免联接。但是,在遇到这种情况之前,您首先要研究诸如索引之类的东西,通常可以在采用非规范化表设计之前将其加快速度。
答案 1 :(得分:0)
第一种情况(带有一个表)将更快地工作。 另外,在第一种情况下,您还有一个varchar键,因此SELECT查询的工作速度要比使用整数键慢。
如果要在SELECT查询中连接两个表,有时最好将链接表中的某些字段存储在第一个表中。
例如,您有一个包含字段town_id的Users表和一个具有town_name的Town表。 如果城镇名称存储在“用户”表中,则查询用户信息和城镇名称的速度更快。