Swift 领域数据库设计

Swift 领域数据库设计,swift,realm,Swift,Realm,我有一个示例数据库,如下所示: class Company:Object { dynamic var companyName = "" let employees = List<Employee>() } class Employee:Object { dynamic var companyName = "" // Is this required? dynamic var name = "" dynamic var age = "" }

我有一个示例数据库,如下所示:

class Company:Object {
    dynamic var companyName = ""
    let employees = List<Employee>()
}

class Employee:Object {
    dynamic var companyName = "" // Is this required?
    dynamic var name = ""
    dynamic var age = ""
}
class公司:对象{
动态变量companyName=“”
让员工=列表()
}
类Employee:Object{
dynamic var companyName=”“//这是必需的吗?
动态变量名称=“”
动态变量age=“”
}

Employee
中的
companyName
属性是否必要?如果不是,我将如何在查询中引用属于特定公司的员工。

您可以使用Realm的linkingObjects功能,如下所示:

class Company:Object {
    dynamic var companyName = ""
    let employees = List<Employee>()
}

class Employee:Object {
    dynamic var name = ""
    dynamic var age = ""
    var company: Company? {
        return linkingObjects(Company.self, forProperty: "employees").first
    }
}
回答你的问题

如果不是,我将如何在查询中引用属于特定公司的员工

您已经有了这样做的方法,因为您将公司的员工存储在其列表中
employees
,所以您可以像这样使用该属性来获取属于公司的员工:

let aCompanysEmployees = someCompany.employees

offtopic:对于一个好的设计,它应该是name而不是companyName,因为您已经在一个company对象中,并且每个人都知道该属性属于该公司。有必要吗?由你决定。你能晚点用吗?很可能。如果您以关系的方式考虑设计,它可能会很有用;要知道哪些公共属性应该共享。@Xatenev使用相同的名称更好。将其视为一个外键。@AhmedKhalaf公司名称在公司类别a外键中是什么O@Xatenev事实并非如此。但如果您将这两个类看作两个关系表,那么这是有意义的。将
companyName
作为
Company
实体的显式标识符。我将如何使用领域过滤器来实现这一点。假设我想寻找一名60岁且属于ABC公司的员工。因为对于
employee
类中的
companyName
,我会做一些类似于
filter(“companyName='ABC'和age=60”)
的事情,如果我是你,我会将
companyName
设置为你的
Company
模型的主键,然后这样做:
如果让Company=realm.objectForPrimaryKey(Company.self,键:“ABC”){let oldEmployees=Company.employees.filter(“age=60”)}
let aCompanysEmployees = someCompany.employees