我正在試驗db4o作爲數據存儲,所以爲了解決這個問題我想我會爲自己構建一個跟蹤web應用程序(在ASP.NET MVC中)的簡單問題。我發現db4o在快速開發方面表現出色,特別是對於像這樣的小應用程序,它也無需ORM。從關係數據庫的背景來看,我應該如何建模db4o(或任何對象數據庫)中的關係?
但是,來自SQL Server/MySQL背景我有點不確定我應該如何構建我的對象,當涉及到關係(或者我只是沒有正確理解對象數據庫的工作方式) 。
下面是我的簡單示例:我只有兩個模型類,Issue和Person。
public class Issue
{
public string ID { get; set; }
public string Title { get; set; }
public string Description { get; set; }
public DateTime? SubmittedOn { get; set; }
public DateTime? ResolvedOn { get; set; }
public Person AssignedBy { get; set; }
public Person AssignedTo { get; set; }
}
public class Person
{
public string ID { get; set; }
public string Name { get; set; }
public string Email { get; set; }
public string Password { get; set; }
}
的ID
屬性是由.NET Guid.NewGuid()
幫手產生只是GUID的字符串。
所以這裏是我最初以爲應用程序會工作;請忽略任何安全問題等,我們假定我們已經存儲在數據庫中的幾個Person
對象:
- 在用戶登錄查詢中
Person
其用戶名和密碼相匹配的數據庫,並存儲他/她的GUID ID作爲會話變量。重定向到應用主屏幕。 - 登錄用戶創建一個新的問題單,從下拉列表中選擇要分配給用戶的用戶。他們填寫其他細節(標題,說明等),然後提交表格。
- 查詢數據庫中的
Person
對象(通過它們的GUID ID)以獲取表示登錄用戶的對象和代表已分配權證的用戶的對象。創建一個新的Person
對象(填充發布的表單數據),將Person
對象分配給Issue
對象的AssignedBy
和AssignedTo
屬性,並將其存儲。
這將意味着我有兩個Person
對象存儲對每個Issue
記錄。但是如果我更新原始文件Person
,那麼會發生什麼情況 - 在各種問題對象中更新所有存儲的對該Person
的引用更新,還是我必須手動處理? 是他們引用或複製?
只是爲AssignedBy和AssignedTo字段存儲一個GUID字符串(如下所示),然後每次根據該字符查找原始的人會更好還是更高效?
public class Issue
{
public string ID { get; set; }
public string Title { get; set; }
public string Description { get; set; }
public DateTime? SubmittedOn { get; set; }
public DateTime? ResolvedOn { get; set; }
public string AssignedByID { get; set; }
public string AssignedToID { get; set; }
}
我想我只是被困在一種令我困惑的某種思維方式中。如果有人能夠清楚地解釋這將是最有幫助的!
謝謝,這當然有道理。 – 2010-08-11 14:41:47