【发布时间】:2020-03-22 08:49:36
【问题描述】:
在过去的 20 分钟里,我一直在阅读有关非规范化的内容,但无法获得一个简洁的代码示例。
这就是非规范化吗?
1. 我们有一个标准化的数据库:
表_1:
customer_id(主键)
国家
城市
街道
门牌号
表_2:
product_id(主键)
customer_id(外键)
product_storage_building
表_3:
product_id(外键)
产品名称
产品颜色
product_origin
-
但是,假设加入所有三个表需要很长时间才能运行
SELECT a.*, b.*, c.* FROM TABLE_1 AS a LEFT JOIN TABLE_2 AS b ON a.customer_id = b.customer_id LEFT JOIN TABLE_3 AS c ON b.product_id = c.product_id
所以我用Table_1 和Table_2 创建了一个新表
CREATE OR REPLACE TABLE Denormalized_Data AS
(
SELECT customer_id,
country,
city,
street,
house_number,
product_id,
product_storage_building
FROM Table_1
LEFT JOIN Table_2
ON Table_1.cusomter_id = Table_2.customer_id
)
-
然后加入Table_3如下
SELECT customer_id, country, city, street, house_number, product_storage_building, Denormalized_Data.product_id product_name, product_color, FROM Denormalized_Data LEFT JOIN Table_3 ON Denormalized_Data.product_id = Table_3.product_id
现在这将使我的查询运行得更快 - 可以将上述整个过程描述为非规范化吗?
谢谢
【问题讨论】:
-
顺便说一句,您很可能应该在表 2 和表 3 中为 product_id 交换键标签
-
@pentium10 - 虽然键标签的存在可能表明该问题与 BigQuery 无关(因为它没有索引) - 另一方面,反规范化是一个与 BigQuery 类似的话题。我会把这个标签加回来!
-
您好,基本上我是想在脑海中了解非规范化的概念。这些表只是表模式的说明。非规范化本质上是否只是创建一个新的数据表来减少复杂连接的工作量?
-
@cget 你运行什么数据库引擎?
-
我使用 BigQuery,标准 SQL
标签: sql google-bigquery denormalization