mysql - 需要更改数据库表之间的关系

标签 mysql ruby ruby-1.8.7

好的,让我们先了解一下基础知识。

我正在运行 ruby​​ 1.8.7,我正在使用续集 gem 版本“2.6.0”。

我有一个名为“用户”的表和一个名为“团队”的表

现在,一个用户可以拥有一个团队,因此它的关系是:

belongs_to :npt_team

但是,作为团队功能升级的一部分,我必须做到这一点,以便用户可以属于多个团队。

我想知道的是:

我可以将其更改为以下之一:

  • :has_and_belongs_to_many
  • :many_to_many
  • :many_to_many_by_ids

哪一个最好用,为什么(因为我想知道)?

其次,当我更改此设置时,表中的数据库会发生什么?

还有什么我应该警惕/了解的吗?

我使用以下 mysql 版本:

mysql Ver 14.14 Distrib 5.6.29, for osx10.11 (x86_64) using EditLine wrapper

编辑:

糟糕,忘了提到一个相当相关的观点。

我没有使用 Rails,我使用的是一个名为 Ramaze 的旧框架。

最佳答案

我的问题的答案是:

要创建关系,我需要将以下内容添加到“用户”表中:

has_and_belongs_to_many(:npt_teams,
                        :join_table => :users_teams,
                        :class => 'NptTeam',
                        :left_key => :user_id,
                        :right_key => :npt_team_id)

many_to_many_by_ids :npt_teams, 'UsersTeams'

创建一个新的连接表,如下所示:

class UsersTeams < Sequel::Model
  clear_all

  set_schema {
    primary_key :id
    integer :user_id, :null => false, :default => 0
    integer :npt_team_id, :null => false, :default => 0
  }
  create_table unless table_exists?

  belongs_to :user
  belongs_to :npt_team
end

并且关系是与连接表一起创建的。

我不知道这是否是最好的方法,但它似乎有效。

至于第二个问题,我不知道,目前DB中的数据似乎不受影响。

现在我只需要将当前团队移至新表即可。

至于我可能还需要了解什么,我不知道,因为你知道,那些知道的人已经知道了还没有回应,所以我只能即兴发挥。

编辑:

移动数据的脚本:

User.all.each do |user|
  join = UsersTeams.create(:user_id => user.id, :npt_team_id => user.npt_team_id)
  puts join.inspect
  join.save
  puts user.npt_teams.to_a.map {|t|t.inspect}.to_s
end

关于mysql - 需要更改数据库表之间的关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37830735/

相关文章:

php - 根据需要在 PHP 和 MySQL 中添加更多 AND 运算符

ruby-on-rails - ElasticSearch在生产环境中的行为有所不同

ruby-on-rails - 如何对一组 ActiveRecord 对象进行分组?

ruby - ruby 中的 400 个错误请求但不是 curl

Ruby - 根据某些条件从数组中选择修改后的值

MySQL 查询和连接

mysqldump mysql 8,在命令行中没有密码的Windows服务器上

mysql - 计算一个词每天被使用多少次

使用纯ruby的Mysql浮点值插入

ruby - YAML 中的序列化/反序列化 ruby​​ 对象