2017-01-22 45 views
1

我正在設計一個數據庫,我計劃在Android上使用Realm實現。我仍在探索和閱讀有關使用圖書館的內容,但我有一個問題牽涉到我。是否可以使用Realm實現橋接表(請參見下圖)?根據我在文檔link中的「關係」部分中閱讀的內容,我可以使用RealmList對象執行多對多關係。例如,對於「User_Activity」表。但是,我仍然不確定如何將數據庫設計「轉換」爲Realm類的等價物。任何意見將不勝感激!創建橋表等效領域類?

enter image description here

+1

用戶可以屬於多個活動?活動是否屬於多個用戶? – EpicPandaForce

+0

@EpicPandaForce活動(例如靜態,跑步,散步)可以屬於多於一個用戶。這就是我在頭腦中看到的。表Activity將只存儲4個條目 - 步行,運行,循環和靜態,這些將在UserActivity中引用並與不同的用戶關聯。 –

+1

啊,而且你還按日期記錄了以前的用戶活動。 – EpicPandaForce

回答

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

我覺得這個模式會正常工作適合你。

+0

謝謝你的回答。看起來非常好。但有一個問題。例如,如果我有一個userId = 1的用戶並且activityId = 1的activity,那麼該字段「userIdAndActivityIdAndDate」將是一個「compaund鍵」,那麼鍵將看起來像那樣 - > 112017-01-23是否正確? –

+1

@GeorgiKoemdzhiev yup,正好(儘管我更喜歡用'_'s)將它們分開〜如果你在主鍵中需要小時/分鐘,那麼這也是你應該想象的東西,就像'2017-01-23-18 -00-00'左右。 – EpicPandaForce

+1

感謝您的幫助!非常感激! :) –

1

您可以簡單地定義喜歡你的課:

public class User { 
    private int id; 
    private String username; 
    ... 
    private UserActivity userActivity; 
} 

public class UserActivity { 
    private int id; 
    private Activity activity; 
} 

你不必 「洋ID」 存儲在您的模型。 Realm實際上是將相關的鏈接對象存儲爲下面的指針。所以,只要按照該領域的鏈接doc並定義鏈接對象作爲字段

+0

謝謝您的回答。我覺得困惑的是,我試圖用典型數據庫的知識來設計數據庫,並忘記了Realm幾乎像一個典型的類一樣是面向對象的。 –

+0

我主要關注如何將特定用戶與特定活動關聯起來。你認爲在User類中創建一個RealmList 字段是否有用? –

+1

是的,'RealmList '將會起作用。 – beeender

1

User_Activity表是數據庫中的輔助表。次表有助於將來自2個不同表格的相關記錄與多對多關係進行綁定。所以,我沒有理由在Realm中定義UserActivity類。

public class User { 
    private RealmList<Activity> activities; 
} 

public class Activity { 
    private RealmList<Users> users; 
} 

如果你想要多對多的關係,就應該足夠了。

至於你的問題,我相信你需要一個一對多的關係,就像是enter image description here

所以,正確的定義是類似以下內容:

public class User { 
    private RealmList<Activity> activities; 
} 

public class Activity { 
    private user = User; 
} 
+1

鏈接對象在realm-java中不受支持https:// github。com/realm/realm-java/issues/607 – EpicPandaForce

+0

我真的很想考慮你的方法(它非常簡單) - 有2個表格 - 具有userId的用戶(以及上面提到的其他字段和RealmList of Activities)和活動表與「類型」,「日期」和「時間」字段(沒有ID,因爲我打算通過用戶的ID獲取活動)。 –

+0

謝謝。以爲,那很快:) –