人与用户与客户 - 正确命名模型

时间:2013-01-12 05:23:47

标签: ruby-on-rails ruby

我在确定正在构建的新应用的型号名称时遇到问题。这些是重要的决定,所以我想确保做得对。这将是一个保存医疗记录的数据库,因此可以记录接受医疗服务的人员,他们的家庭成员,医生,护士/行政人员,事故目击者等。

我没有针对每种类型的人设置特定的表格,而是考虑制作“人物”和“用户”模型。 “用户”模型将容纳所有为医疗机构工作的人员,而“人员”表将容纳其他所有人 - 例如患者和事故目击者。

我仍然有问题,因为如果用户记录了一个意外,一个'用户'可能是证人,另一个可能是受害者。它基本上使我的应用程序看起来不灵活,因为我将'人'(患者等)和'用户'(员工等)分成系统中的两个恒定位置。

那么,为什么我不能为每个人制作一个名为'People'的桌子呢?然后,一个人可以是用户,雇员,医生,患者,受害者 - 或他们的任何组合。

我们是否被教导要始终为为我们工作的人命名并登录系统'用户'?这有关系吗?

为每个人准备一张名为'Person'的桌子是否有任何不利之处?它似乎使事情变得容易一些。任何人都可以是用户(通过启用有效登录/状态登录)或非用户。我不认为这是否定的。

3 个答案:

答案 0 :(得分:5)

你和我总是人,但我们在某些情况下扮演特定的角色 - 那么所有人都由一个名为“Person”的模型代表的设置如何,并且由需要这些角色的特定类链接。例如:

class Person < ActiveRecord::Base
  ...
end

class HospitalEmployee
  belongs_to :user, class_name: 'Person' # foreign key is user_id
end

class MedicalRecord < ActiveRecord::Base
  belongs_to :patient, class_name: 'Person' # foreign key is patient_id
  ...
end

class Accident < ActiveRecord::Base
  belongs_to :victim, class_name: 'Person' # foreign key is victim_id
  belongs_to :witness, class_name: 'Person' # foreign key is witness id
end

通过这种方式,组成的数据始终是不变的,但组成他们所扮演的角色的数据存储在其他模型中。

你会经常在野外找到这种设置 - 例如,在我工作的大学里,所有与个人打交道的记录都指向一个主人“人”文件 - 后来成为雇员的学生使用了两个实例中PEOPLE文件中的记录相同。

答案 1 :(得分:0)

您可以为所有人制作单人桌。这可以使用单表继承来完成。我建议您使用User作为父级,其他人作为子级(Employee,Patient)。您需要在User表中创建类型字段。它将存储用户类型。

有关详细信息,请参阅:http://rookieonrails.blogspot.in/2008/01/single-table-inheritance-in-rails.html

答案 2 :(得分:0)

我倾向于创建特定模型和通用模型 - 用户有人,员工有人。 Person模型只包含名称,ID,电子邮件等基础知识。特定于特定角色的所有内容都在特定于角色的模型中(例如,用户),但因为您可以始终从任何相关模型返回到Person,例如,您可以查看给定人员拥有的所有角色。 / p>