Ruby on rails 在数据模型中使用has_many还是has_many:through

Ruby on rails 在数据模型中使用has_many还是has_many:through,ruby-on-rails,data-modeling,activemodel,Ruby On Rails,Data Modeling,Activemodel,我正在使用RubyonRails构建一个web应用程序,我的数据模型有用户,每个用户都可以创建键(音乐键,例如a#minor) 键由和弦组成,和弦由音符组成。音符的数量是有限的,但和弦和键的数量是无限的(因为每个用户都可以创建自己的,允许重复) 我目前的工作假设是,键、和弦和音符都将是数据库中的一个表(如果这听起来有误,请停止我的工作),我正在尝试确定这些键、和弦和音符是否都应该属于它上面的级别 我希望能够选择一个键并查看其中的所有和弦,选择一个和弦并查看它所在的所有键(和弦/音符也是如此)。此

我正在使用RubyonRails构建一个web应用程序,我的数据模型有用户,每个用户都可以创建键(音乐键,例如a#minor)

键由和弦组成,和弦由音符组成。音符的数量是有限的,但和弦和键的数量是无限的(因为每个用户都可以创建自己的,允许重复)

我目前的工作假设是,键、和弦和音符都将是数据库中的一个表(如果这听起来有误,请停止我的工作),我正在尝试确定这些键、和弦和音符是否都应该属于它上面的级别

我希望能够选择一个键并查看其中的所有和弦,选择一个和弦并查看它所在的所有键(和弦/音符也是如此)。此外,我希望能够看到用户、键、和弦和音符的列表(索引),彼此独立。这是否有助于通过联想来使用所属


如果还不清楚,我是RoR初学者,因此任何指导/建议都将不胜感激。提前感谢。

当存在一对多关系时,Use
具有多个
关系;当存在多对多关系时,
通过
具有多个。例如,在您的描述中,您说和弦由许多音符组成,因此和弦
有许多
音符。一个音符是只有一个和弦还是有很多和弦?如果音符只有一个和弦,则
有许多
/
属于
关系是合适的

我刚刚在维基百科上搜索了一下,发现C大调和弦由音符C、E和G组成。如果一个和弦
有很多
音符,而一个音符
属于
一个和弦,那么
和弦id
将存储在notes表中,一个音符不能
有很多
和弦。我假设一个音符
有很多和弦,所以
多对多的关系可能更合适


我创建了一个关于许多
的关系,你可能会发现这些关系对我很有帮助。

接受这个答案,展现了我的力量。我不同意在您的应用程序中存在
多对多
关系。它的糟糕的数据库设计方法就是这样。我相信,如果你有某种
多对多
关系,你会想要一个解析表,它将存储组合键
chord\u id
note\u id
这张表分解了多对多关系,解析了你可能在这里遇到的这种形式的基数。这样,你就可以有效地使用一个和弦通过和弦音符拥有多个音符,然后在你的音符表中使用一个音符通过和弦音符拥有多个。您将通过
注意到关键字
,下面的链接准确地解释了这种关系设置的作用。我站在正确的立场上为模型关联和弦有很多音符和一个音符有很多和弦辩护,因为这个问题为我的推理辩护。我只是不明白你为什么要用多对多关联来设置你的应用程序

所以说所有这些,你的设置是(如果你有多对多)

和弦

class Chord < ActiveRecord::Base 
   Chord has_many :notes, :through ChordNote
end
class Chord
ChordNote

class ChordNote < ActiveRecord::Base 
  belongs_to :chords
  belongs_to :notes
end
class Note < ActiveRecord::Base
  has_many :chords, :through => :ChordNote
end 
class ChordNote
注意

class ChordNote < ActiveRecord::Base 
  belongs_to :chords
  belongs_to :notes
end
class Note < ActiveRecord::Base
  has_many :chords, :through => :ChordNote
end 
class注释:ChordNote
结束

对于前面的答案,我没有任何补充。这与其说是对编程问题的回答,不如说是对你问题的音乐理论评论。我已经走过你的道路,学到了一些可能会影响你的设计选择的东西。如何将一组音符与键联系起来并没有很好的答案,因为一系列音符的和弦意义是不明确的。同一个音符序列可以有不同的音线名称(和含义),这取决于作曲家如何使用或意图。随着和弦越来越复杂,问题变得更严重。你可以很容易地从基调到和弦再到音符,但如果不去挖掘作曲家的大脑,就无法保证你能倒退。问题来自基本音乐二分法,即音符可以根据它们的和声关系(一个3:2比例的完美五分音符)或它们在调和色音阶中的位置来定义。(在钢琴上弹奏的钢化完美五度音阶是700美分或大约1.498的比率。)钢化音阶是一种必要的折衷,但当你用它来表示乐曲时,重要的音乐理论信息就会丢失。对于所有调音音阶中的音程,都可以有许多类似的完美调音音程。例如,由这些比率定义的音程:3:2、40:27和243:160都足够接近,以至于它们转换为相同的调性音符,但要知道和弦是什么,你需要知道是哪个比率。由于调和音符是一个近似值,一旦你选择了一个实际的音符,你需要从音符到和弦的比率信息就会丢失。正是比率定义了构成意义上的和弦

这并不意味着这是一项不可能完成的任务,至少对于更简单的和弦来说是如此。对于三和弦,即使是倒转,通常也只有一个有用的选择,但一旦你加上第七个,它就会变得一团糟。你必须做出选择。将有一个最有可能的选择,这可能已经足够好了。我决定选择最和谐的和弦(大约是音程比中整数最小的和弦)。这意味着你无法100%可靠地从组成它们的音符中推断出与键相关的和弦名称。对于一般的爵士乐作品(爵士乐喜欢复杂的和弦),这几乎成了一个无望的例子<