【发布时间】:2020-04-16 23:06:46
【问题描述】:
我有很多用户的下表:
USERS
-----
id
name
lastname
cv
我想将该表划分为:
USERS
-----
id
name
lastname
USER_CVS
--------
id
user_id
cv
在 ORACLE 中,我的方法是:
- 创建 USER_CVS 表
- 使用 INSERT INTRO USER_CVS SELECT ... FROM USERS 插入数据
- 从 USERS 中删除 cv 列
但是,有两个问题:
- 在2.数据库中的数据量翻倍,我没有那么多空间。
- 复制cvs需要很长时间
还有其他方法来划分这个表吗?
【问题讨论】:
-
我所做的技巧是添加一个额外的列
migrated number(1),其值为零(false)。然后,我一次迁移一千个(或任何其他大小)的子集:迁移、标记、删除、重复。这样我就不会用完空间。 -
在查看技术解决方案之前,我会问您为什么要这样做?首先,每个表都有一定数量的固定和成比例的开销,因此将 x 量的数据分布在两个表中将占用更多空间。其次,更重要的是,将其拆分为两个表如何影响正确规范化的数据设计?
-
规范化数据并不意味着不必要地将一个表拆分为多个表并复制数据。如果这是一个生产级设计,那么您应该回到您的绘图板并考虑设计。