Rails:在DB中存储数组与建立关系

时间:2016-02-24 02:38:32

标签: ruby-on-rails postgresql

设置:有两种型号具有以下属性。

  1. 人:姓名,年龄,工作经验,可用日期
  2. WorkExperience:job_title,starting_date,ending_date
  3. 然后,我可以做以下

    Person
      has_many work_experiences
    
    WorkExperience
      belongs_to Person
    

    Q1: available_dates应该是属性(array of dates)还是孩子(例如Person has_many available_dates)?

    Q2: Person work_experiencesjar xf app.jar java -cp /lib/*:/ com/domain/module/Main 字段只是一个对象数组,而不是数据库中的单个表?

2 个答案:

答案 0 :(得分:0)

TL; DR:在所有设计问题中,我认为答案是“它取决于。”

Q1:

我以前做过两种方式。如果我做出这个决定,我会考虑以下几点:

  • 我是否认为自己在不久的将来会向available_dates添加更多信息?例如,它可能是位置,时区,通勤距离等,这将使这些数据成为“可用性”。在那里面 case,我宁愿用关联创建单独的对象。
  • 我是否看到自己在代码中的其他位置重复使用这些日期?然后我宁愿把它们分成不同的对象并坚持下去。

第二季度:

我不认为这对你的理智有好处。 DB具有简单的数据类型,并非设计用于保留对象模型。

答案 1 :(得分:0)

在Q1上我会使用关联而不是数组,因为它提供了更大的灵活性。所以,正如你所说的那样,孩子就是我要做的事。

在第二季度,我还将使用单独的WorkExperience模型,因为它还提供了更大的灵活性和增长空间。当Person开始收集工作经验并且查询信息可能比使用数组需要更复杂时,数组可能会变得有点混乱。使用单独的模型Active Record将为您提供许多工具,您可以使用这些工具来挖掘一个人的工作经历。

希望有所帮助。