将一个表的主键作为文本存储在另一个表中是否实用?

时间:2015-05-14 02:49:45

标签: mysql sql

想象一下,如果我们在表A中有数百万行。

对于表A的每个大行(10列以上),我们可能有20多行是完全重复的,除了我们存储表B的ID的单个列。

在表A中存储更高效和/或内存节省,文本字段中表B的ID> " B_ID1 | B_ID2 | B_ID3"等,然后返回此数据客户端,解析它,然后将其发送出表B中的实际数据。

假设我们在表A中有200多万行唯一数据,如果我们在文本字段之外存储了额外的列,我们会在该表中添加2百万* 20 +行以及所有额外浪费的空间。

或者我对SQL的方法和理解非常天真?我刚刚开始像一周前一样使用它,并自学了我的应用程序的基础知识。

3 个答案:

答案 0 :(得分:1)

这是最好使用weak entity(表格)的地方。

您只需创建一个将A链接到B的新表,而不是复制表A中的所有数据。在其中,您只能拥有表A中的ID,该表链接到表B中的多个ID。 (并将主键设置为两个外键)。

答案 1 :(得分:0)

如果您发现自己在多行中复制了大量数据,则可能表明您的数据库未正常化(http://en.wikipedia.org/wiki/Database_normalization)。

这意味着您可以将其分成多个相互引用的较小的表,以避免数据重复。

答案 2 :(得分:0)

SQL提供了以各种方式索引表的功能。我不是大数据方面的专家,但我的第一个预感就是没有。拥有自动递增的索引主键使SQL Server能够以一种可以轻松查找所需信息的方式完成维护记录列表的工作。

真正的问题归结为你需要如何解析/交互这200万个奇数行。它是一堆拆分文档信息吗?用户档案?是来自某些硬件设备的实时输入吗?上下文是确定SQL是否是解决问题的最佳方式的关键。

您能给我们一些关于您理论化的项目的背景吗?或者这是一个更假设的问题?

更新:查看W3 Schools以获取SQL概念的简要介绍(以及其他编码参考)