2016-04-05 6 views
1

Ich habe ein Beispiel-Datenbank wie folgt:Realm Datenbank-Design

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

Ist companyName Eigenschaft in der Klasse Employee notwendig? Wenn nicht, würde ich auf die Mitarbeiter verweisen, die zu einer bestimmten Firma in der Abfrage gehören.

+0

offtopic : Es sollte Name anstelle von Firmenname für ein gutes Design sein, weil Sie bereits in einem Firmenobjekt sind und jeder weiß, dass das Attribut zu der Firma gehört. – Xatenev

+0

* Ist es notwendig? * Sie entscheiden. * Kannst du es später brauchen? * Wahrscheinlich. Es kann nützlich sein, wenn Sie über den Entwurf auf relationale Weise nachdenken; um zu wissen, welche gemeinsamen Attribute geteilt werden sollten. –

+0

@Xatenev Der gleiche Name ist besser. Stellen Sie es sich als Fremdschlüssel vor. –

Antwort

1

Sie können linkingObjects Funktion von Realm zu diesem Zweck wie folgt verwenden:

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

Dieser Ansatz spart Ihnen die Mühe, Ihre Mitarbeiter Objekts company Eigenschaft korrekt und es spart auch Sie Platz, da Unternehmen hier nicht gespeichert . Wenn Sie diesen Weg wählen Sie Ihre Mitarbeiter des Unternehmens Objekt leicht wie folgt zu erreichen: (dies nil, wenn Mitarbeiter nicht jedem Unternehmen zugeordnet ist)

let aCompany = someEmployee.company 

Und Ihre Frage

zu beantworten, wenn nicht, wie würde ich in der Abfrage auf die Mitarbeiter verweisen, die zu einem bestimmten Unternehmen gehören.

Sie haben bereits eine Möglichkeit, dies zu tun, da Sie in der Liste eines Unternehmens des Mitarbeiters speichern employees, so dass Sie nur diese Eigenschaft wie folgt verwenden können Mitarbeiter zu erhalten, die zu einem Unternehmen gehören:

let aCompanysEmployees = someCompany.employees 
+0

Wie würde ich das mit dem Realm-Filter tun? Angenommen, ich möchte nach einem Mitarbeiter im Alter von 60 suchen und gehört zur Firma ABC. Ursache mit dem 'companyName' in der 'employee' Klasse, werde ich etwas wie' filter ("companyName = 'ABC' und alter = 60") ' – John

+0

machen Wenn ich du wäre, würde ich 'companyName' als Primärschlüssel für deine setzen 'Company'-Modell und dann etwas wie folgt:' Wenn let company = realm.objectForPrimaryKey (Company.self, Schlüssel: "ABC") { lassen Sie oldEmployees = company.employees.filter ("age = 60") } ' – bcamur