我正在設計一個數據庫,我計劃在Android上使用Realm實現。我仍在探索和閱讀有關使用圖書館的內容,但我有一個問題牽涉到我。是否可以使用Realm實現橋接表(請參見下圖)?根據我在文檔link中的「關係」部分中閱讀的內容,我可以使用RealmList對象執行多對多關係。例如,對於「User_Activity」表。但是,我仍然不確定如何將數據庫設計「轉換」爲Realm類的等價物。任何意見將不勝感激!創建橋表等效領域類?
回答
public class User extends RealmObject {
@PrimaryKey
private String userId;
private String password;
@Index
private String username;
private String paGoal; // ?
private long maxInactivityInterval;
private RealmList<UserActivity> userActivities;
private Activity currentActivity; // optional
}
public class UserActivity extends RealmObject {
@PrimaryKey
private String userIdAndActivityIdAndDate; // userid_activityid_2017-01-23
@Index
private Date date;
private long duration;
private User user;
@Index
private String userId;
private Activity activity;
@Index
private String activityId;
}
public class Activity extends RealmObject {
@PrimaryKey
private String activityId;
@Index
private String type;
}
我覺得這個模式會正常工作適合你。
謝謝你的回答。看起來非常好。但有一個問題。例如,如果我有一個userId = 1的用戶並且activityId = 1的activity,那麼該字段「userIdAndActivityIdAndDate」將是一個「compaund鍵」,那麼鍵將看起來像那樣 - > 112017-01-23是否正確? –
@GeorgiKoemdzhiev yup,正好(儘管我更喜歡用'_'s)將它們分開〜如果你在主鍵中需要小時/分鐘,那麼這也是你應該想象的東西,就像'2017-01-23-18 -00-00'左右。 – EpicPandaForce
感謝您的幫助!非常感激! :) –
您可以簡單地定義喜歡你的課:
public class User {
private int id;
private String username;
...
private UserActivity userActivity;
}
public class UserActivity {
private int id;
private Activity activity;
}
你不必 「洋ID」 存儲在您的模型。 Realm實際上是將相關的鏈接對象存儲爲下面的指針。所以,只要按照該領域的鏈接doc並定義鏈接對象作爲字段
謝謝您的回答。我覺得困惑的是,我試圖用典型數據庫的知識來設計數據庫,並忘記了Realm幾乎像一個典型的類一樣是面向對象的。 –
我主要關注如何將特定用戶與特定活動關聯起來。你認爲在User類中創建一個RealmList
是的,'RealmList
User_Activity表是數據庫中的輔助表。次表有助於將來自2個不同表格的相關記錄與多對多關係進行綁定。所以,我沒有理由在Realm中定義UserActivity類。
public class User {
private RealmList<Activity> activities;
}
public class Activity {
private RealmList<Users> users;
}
如果你想要多對多的關係,就應該足夠了。
所以,正確的定義是類似以下內容:
public class User {
private RealmList<Activity> activities;
}
public class Activity {
private user = User;
}
鏈接對象在realm-java中不受支持https:// github。com/realm/realm-java/issues/607 – EpicPandaForce
我真的很想考慮你的方法(它非常簡單) - 有2個表格 - 具有userId的用戶(以及上面提到的其他字段和RealmList of Activities)和活動表與「類型」,「日期」和「時間」字段(沒有ID,因爲我打算通過用戶的ID獲取活動)。 –
謝謝。以爲,那很快:) –
- 1. Haskell:創建等效列表
- 2. 創建密鑰表和領域模型
- 3. 如何創建動態表/在asp.net領域類似phpMyAdmin的
- 4. 在領域遷移過程中創建領域對象
- 5. 在Python中創建等效的類?
- 6. 組表並顯示等領域
- 7. Grails領域類
- 8. 類領域
- 9. 領域類型的領域遷移long
- 10. 試圖創建實例應用領域
- 11. IntentService領域 - 線程創建崩潰
- 12. 投影創建新的領域
- 13. 領域創建和人口序列
- 14. 創建新的領域與logstash
- 15. 領域:通過ID創建關係
- 16. 如何創建只讀領域對象?
- 17. laravel創建遺漏/跳過領域
- 18. 屬性在C#創建領域
- 19. 在Swift中創建領域對象Singleton
- 20. 創建具有隻讀4.2.1領域
- 21. java.security.cert.CertificateParsingException:簽字領域無效
- 22. 無效的領域覆蓋
- 23. Grails領域類JSON
- 24. SQL查詢等領域不同的領域
- 25. 如何在類型ID創建新領域的android
- 26. 布爾瑪領域類不創建利潤率底部
- 27. 新的Grails領域類沒有在數據庫中創建表格
- 28. 發佈類領域的另一個類領域
- 29. 查看另一個領域類中的grails領域類屬性
- 30. 創建新領域列表和添加項目
用戶可以屬於多個活動?活動是否屬於多個用戶? – EpicPandaForce
@EpicPandaForce活動(例如靜態,跑步,散步)可以屬於多於一個用戶。這就是我在頭腦中看到的。表Activity將只存儲4個條目 - 步行,運行,循環和靜態,這些將在UserActivity中引用並與不同的用戶關聯。 –
啊,而且你還按日期記錄了以前的用戶活動。 – EpicPandaForce