2016-04-05 7 views
1

次のように私は例のデータベースを持っている:レルムデータベース設計

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 = "" 
} 

は、クラスEmployee neccessaryでcompanyName財産ですか?そうでない場合は、クエリ内の特定の会社に属する従業員をどのように参照するのでしょうか。

+0

offtopic :良いデザインのためにはcompanyNameではなく名前でなければなりません。なぜならあなたは既に企業オブジェクトの中にいて、その属性が会社に属していることを誰もが知っているからです。 – Xatenev

+0

*必要ですか?*あなたが決める。あなたは後でそれを必要とすることができますか?リレーショナルな方法でデザインを考えた場合は役に立ちます。どの共通の属性を共有すべきかを知る。 –

+0

@Xatenev同じ名前を持つ方が良いです。それを外部キーと考えてください。 –

答えて

1

あなたは、このような、その目的のためにレルムの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 
    } 
} 

このアプローチはあなたに正確なあなたのEmployeeオブジェクトのにcompanyNameプロパティを維持する努力を節約し、会社がここに格納されていないので、それはまた、あなたのスペースを節約。あなたはこのように簡単にあなたの従業員の会社オブジェクトを取得することができ、このパスを選択した場合:

let aCompany = someEmployee.company 

そして答えるために、あなたの質問

ていない場合はどのように(これは、従業員がどの会社に関連付けられていない場合はnilを返します)クエリ内の特定の会社に所属する従業員を参照します。

あなたがそのリストemployeesに当社の従業員を保存するので、あなただけの会社に所属する従業員を取得するには、このようにそのプロパティを使用することができますので、あなたはすでに、これを行う方法があります。

let aCompanysEmployees = someCompany.employees 
+0

レルムフィルタを使って、どうすればいいですか? 60歳の従業員を検索したいとし、会社ABCに属しているとします。 'employee'クラスの' companyName'で、 'filter(" companyName = 'ABC'とage = 60 ")のようなことをします。 – John

+0

もし私があなただったら私は' companyName'をあなたの主キーとして設定します'company'モデルを作成し、次にこのようなことをします:'もしlet = company.employees.filter – bcamur

関連する問題