如何组织失控表?

时间:2016-01-20 21:05:41

标签: ruby-on-rails database postgresql

你好,早上好。

我正在开展一个侧面项目,我正在为现有应用添加分析板。问题是现在users表有超过400列。我的问题是,组织此表的更好方法是将表拆分为单独的表。你是如何做到的,如何在新表之间传递表格?

另一个问题是,如果我将表格分开,我仍然可以通过用户模型保存到它中吗?我现在有代码说:

user.wallet += 100
user.save

如果我将钱包与用户分开并链接两个表,我将不得不更改此代码。我问这个的原因是应用程序中有大量这样的代码。

非常感谢你能帮我理解如何组织数据库。作为奖励,如果有一本关于数据库组织的书,你可以向我推荐(最好是一个在轨道上)。

编辑:是否有办法在不丢失任何数据的情况下完成所有这些操作。例如,将数据传输到新表上的新列,然后销毁旧列。

1 个答案:

答案 0 :(得分:1)

请阅读:

  

数据库规范化

在搜索该字符串时,您会收到很多热门内容,而且有很多关于该主题的数据库设计书籍。

最有可能的是,你的这张桌子缺乏正常化,但你必须看到自己! 只是为了给出一个方向 - 在处理这些列数的十分之一时我会有点焦虑。那句话,我显然必须强调,可能有400列的标准化表格,以及只有10列的粗略创建的例子。
一般来说,处理设计不良的表并因此遇到麻烦的概率只会随着列数的增加而增加。

所以请花点时间,如果你发现,那个用户表需要规范化的下一步确实是在几个表上传播数据。因为这显然(很可能甚至是很大)影响了你的应用程序的编码,所以你必须在这里完全平衡利弊 - 根本无法从远处判断它。

说,你有很多问题(比如激烈的性能问题 - 你不会发布它)可以通过规范化来缓解,有不同的方法来分割数据。请在这里阅读:

  

基数

通常新表由

链接
  

外键

,出现在多个表中并用于加入它们的相同数据(如用户ID),即。

最后,是的,你可以做到这一点而不会丢失数据,因为在规范化时总体信息量永远不会改变 如果你的上一个问题是技术性的:从一列读取数据并将它们插入一个新列(新表中)是没有问题的。这必须以某种顺序发生,因为必须先填写外键才能使用它们。见

  

参考完整性

然而,很明显:删除数据和删除列会干扰应用程序的可操作性。好的计划到期了。