Database Grails-通过自定义连接表进行多对多操作,其中包含级联删除&;同一等级,不包括以下各项

Database Grails-通过自定义连接表进行多对多操作,其中包含级联删除&;同一等级,不包括以下各项,database,grails,many-to-many,gorm,Database,Grails,Many To Many,Gorm,我正在建立一个CRM系统,希望规范化我的数据库。许多域类/DB表(如雇员、联系人、潜在客户等)都使用以下字段: 地址 电话号码 电子邮件地址 社交网络 评论网站 Employee Domain Class/DB表以1对1的关系属于我的用户域类。除了员工可以有许多电话号码、电子邮件地址等之外,他们还可以与团队域类有多对多关系和一对多关系,这样员工就是许多不同团队的“团队领导”和“团队成员”,而团队有许多不同的成员,只有一个领导者 我的问题是,在Grails中处理这些无数关系的最佳方式是什么。我

我正在建立一个CRM系统,希望规范化我的数据库。许多域类/DB表(如雇员、联系人、潜在客户等)都使用以下字段:

  • 地址
  • 电话号码
  • 电子邮件地址
  • 社交网络
  • 评论网站
Employee Domain Class/DB表以1对1的关系属于我的用户域类。除了员工可以有许多电话号码、电子邮件地址等之外,他们还可以与团队域类有多对多关系和一对多关系,这样员工就是许多不同团队的“团队领导”和“团队成员”,而团队有许多不同的成员,只有一个领导者

我的问题是,在Grails中处理这些无数关系的最佳方式是什么。我的每一个问题都有答案,但它们在并行使用时几乎总是遇到问题

根据Burt Beckwith的说法,最好的解决方案是为每个关系手动创建联接表,并在不使用hasMany的情况下对其进行管理;但是,该解决方案没有在任何地方演示。还缺乏高质量的文档来解释这个问题(这可以说是Grails中最难掌握的部分)

有人能为这个更复杂的问题提供一个解决方案,解释引用的较小的分段解决方案是如何结合在一起的吗

下面是一个示例域模型,演示了我想要实现的目标:

class Employee {
    String firstName
    String lastName
    ...
    static belongsTo = [user: User]
    //Custom Pivot Tables or HasMany?
    static hasMany = [teams: Employee_Team, emails: Email, socialNetworks: SocialNetwork, ...]
}


class Team {
    String name
    ...
    static hasMany = [employees: Employee_Team]
}

class Employee_Team {

    static belongsTo = [employee: Employee, team: Team]

    static Employee_Team create(Employee employee, Team team, boolean flush = false) {
    new Employee_Team(employee: employee, team: team).save(flush: flush, insert: true)
    }
}

class EmailAddress {
    def email
    ...
    static hasOne = [owner: ????, leadContact: Lead, ...]
    ???? could be a Customer, Employee, Company, etc.
}

class SocialNetwork {
    String name
    ...
    static hasMany = [employees: Employee, customers: Customer, leads: Lead, ...]
}

编辑:


代表瓦希德对我的用例可以理解的误解。首先,细节并不重要。我只是觉得在这里使用foo、bar等会妨碍清晰度。其次,我已经将电话号码和电子邮件地址规范化到他们自己的表中,因为我不想将人们限制在有限数量的电话号码(也称为主要、次要或工作、个人)中,而且我有许多表需要电话号码、电子邮件地址等字段。例如,员工(平台用户)、联系人(其他公司的人员)、公司(办公室主线)、潜在客户、机会和客户都需要联系信息;潜在客户可能与目标公司(多个办公室、部门和/或主线)的3个联系人(具有多个个人号码)关联,并且需要为参与潜在客户演示的员工(SDR、客户主管和解决方案架构师)存储多个号码。硬编码字段以适应所有用例是不可能的。最后,我正在构建一个神经网络,对数据点和社会网络之间的关系进行建模,以执行分类和预测建模。因此,我需要能够将一个数字追溯到其所有者,并解析出与该数字连接的所有附属关系(可能跨越多个SASS实例)。关键是,有充分的理由需要支持多个双向GORM映射,其中包括涉及单个表的级联删除。然而,我还没有看到一个在Grails中执行的高质量示例。例如,在Laravel中,这很简单,因为多对多关系不需要“所有者”(belongsTo映射)。注意:我将EmailAddress域类更新为HasOne,但是这个域类还需要上面未显示的其他多对多映射。此外,我认为这一变化使我无法将一个电话会议拨入号码映射到多个员工。

我已删除了我的答案,因为您建议对其进行否决投票。尽管它的目的是让您尝试以不同的方式看待您收到的需求,并且似乎要求这必须是它应该工作的方式。正如我所建议的,并且仍然坚持我所说的,我个人认为员工发很多电子邮件,然后再发很多员工的电子邮件,并没有什么好处。如果需要,您可以向员工查询以解决此问题。这可能对你有帮助。我已经删除了我的答案,因为你建议你将否决它。尽管它的目的是让您尝试以不同的方式看待您收到的需求,并且似乎要求这必须是它应该工作的方式。正如我所建议的,并且仍然坚持我所说的,我个人认为员工发很多电子邮件,然后再发很多员工的电子邮件,并没有什么好处。如果需要,您可以向员工查询以解决此问题。这可能对你有帮助。