2017-01-22 95 views
0

我開始嘗試境界數據庫,但我不知道如何寫這個層次結構的數據庫:如何保存在數據庫領域多層次關係

class Address { 
Properties for the address object 
} 

class Street { 
addresses = List<Address>() 
Plus other properties 
} 

class Area { 
    streets = List<Street>() 
} 

class Manager { 
areas = List<Area>() 
} 
  1. 如果我現在加入新區域,我應該調用類似realm.write { areas.append(newAreaObject) } 將其添加到數據庫。那會寫出所有的街道和地址嗎?

  2. 如果我只是想添加十個新街道地址?根據文檔,List.append函數只能在寫入語句中。所以,我應該這樣做

    for i in 0..<10 { addAddress(address) }

,然後實現

Street.addAddress(Address) 
{ 
    realm.write {street.append(address)} 
} 

或者我可以叫for i in 0..<10 {street.append(address)}然後調用realm.write { areas.add(newAreaObject, update: true)}

  • 如果我更新地址的名稱,我應該在那裏寫一個動作嗎?
  • 就這樣,我以正確的方式執行操作,而不是做大量的寫操作來減慢速度。對於每個類中的每個附加語都有一個寫操作,例如,如果您生成一個有10條街道的區域,每條街道有100個地址,並且每個附加語句都將其寫入數據庫,我感到很奇怪。

    只需將所有內容添加到列表中,然後將所有內容全部寫入數據庫,這將是一件好事。

    我看過文檔,但我不明白。感謝您的任何意見!

    回答

    0

    關於#1和#3:

    所有改變到一個對象(添加,修改和刪除)必須在寫入事務中完成。

    #2:

    由於寫交易中產生不可忽略的開銷,您應該構建您的代碼,以儘量減少寫入事務的數量。

    這意味着,這是更好地爲對象添加到列表中創建一個交易,所以不是:

    for i in 0..<10 { 
        realm.write { 
         street.append(address) 
        } 
    } 
    

    你應該做的

    realm.write { 
        for i in 0..<10 { 
         street.append(address) 
        } 
    } 
    

    請,多見於https://realm.io/docs/swift/latest/#writes

    +0

    感謝您的回答!但是,擁有頂級寫入功能還是應該爲每個班級中的每個設置員都有一個寫入功能?像「setName(name){ralm.write {self.name = name}}」。這意味着如果在更新對象時編寫事務,它可能會很多。 – Mackan

    +0

    一般而言,您不需要這樣做,並應在單個寫入事務中設置所有屬性,請參閱文檔中的示例:https://realm.io/docs/swift/latest/#updating-objects。 – Dmitry

    +0

    我明白了,所以爲每個設置的屬性寫一個事務。好,謝謝! – Mackan