将列添加到rails中的表和连接表之间有什么区别?

时间:2017-07-13 15:13:10

标签: ruby-on-rails ruby

我最近发现您可以通过执行以下操作向Rails中的表添加列:

h.fig = figure;
h.ax = axes();
h.patch(1) = patch([0 1 1 0],[0 0 .3 .3],10);
h.patch(2) = patch([0 1 1 0],[.5 .5 .9 .9],5);
set(h.patch, 'FaceAlpha', 0);
set(h.patch(1), 'EdgeColor', cdata2rgb(h.ax,h.patch(1).FaceVertexCData));
set(h.patch(2), 'EdgeColor', cdata2rgb(h.ax,h.patch(2).FaceVertexCData));

以前我曾经加入过表格,这对我来说非常复杂,但添加一个列似乎可以完成同样的任务。

为什么我要选择一个而不是另一个?

3 个答案:

答案 0 :(得分:2)

表格代表单个“实体”。在这种情况下,将users.lastname存储在同一个表中可能是最有意义的。

另一方面,假设用户可以拥有 许多 电话号码。在这种情况下,最好normalise the database并将此数据存储在单独的表中。

换句话说,你想避免做这样的事情:

users.phone_number_1
users.phone_number_2
users.phone_number_3

这种方法的关键问题(如上面的链接更详细解释)是:

  • 对于必须用户,您将拥有大量冗余列。这会导致存储空间浪费,性能下降。
  • 如果用户超过限制,您需要不断添加新列(例如3个数字,因为有3列)。
  • 查询数据变得更加困难。例如,假设您要查询“所有拥有电话号码X的用户” - 您现在需要搜索多个列!

相反,请创建一个单独的phones表格,该表格由user_id列加入用户。

答案 1 :(得分:1)

我想这取决于你的应用程序,但通常最好“规范化”你的数据库。也就是说,为特定对象定义单个表。用户表可能包含字段user_idfirst_name和& last_name。然后,您可以加入user_id字段。这往往会使您的查找速度更快,表格更小。

https://en.wikipedia.org/wiki/Database_normalization

答案 2 :(得分:0)

这与rails和ActiveRecord没有多大关系,但更多的是数据库设计问题。
没有太多细节:在关系数据库管理系统中,当你需要的某些信息已经在不同的地方(通常是另一个表)中时,你可以连接表(或你的情况下的列?)(因此"关系"在名称中,表彼此相关并共享信息)。您不想重复数据。
这在NoSQL数据库中是不同的,其中连接可能甚至不存在(MongoDB具有嵌入式文档的概念,您将在某些时候必须重复数据)
我是你的情况,很简单(从数据库的角度来看)只需获取已有的信息(first_name + last_name)并返回它。添加具有相同信息的另一列似乎是浪费的'。
您应该能够在模型中定义一个返回全名的辅助方法,请参阅create a name helper