gpt4 book ai didi

database - 来自关系数据库背景,我应该如何在 db4o(或任何对象数据库)中建模关系?

转载 作者:搜寻专家 更新时间:2023-10-30 20:21:43 25 4
gpt4 key购买 nike

我正在试验将 db4o 作为数据存储,因此为了掌握它,我想我应该为自己构建一个简单的问题跟踪 Web 应用程序(在 ASP.NET MVC 中)。我发现 db4o 在快速开发方面非常出色,尤其是对于像这样的小型应用程序,而且它还消除了对 ORM 的需求。

但是,由于有 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 对象:

  1. 用户登录。在数据库中查询与用户名和密码匹配的 Person,并将他/她的 GUID id 存储为 session 变量。重定向到应用主屏幕。
  2. 登录用户创建新问题单,从下拉列表中选择要将其分配给的用户。他们填写其他详细信息(标题、说明等),然后提交表格。
  3. 查询数据库中的 Person 对象(通过它们的 GUID ID)以获取一个代表登录用户的对象和一个代表票已分配给的用户的对象。创建一个新的 Person 对象(用发布的表单数据填充),将 Person 对象分配给 Issue 对象的 AssignedByAssignedTo 属性,并将其存储。

这意味着我针对每个 Issue 记录存储了两个 Person 对象。但是如果我更新原始的 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; }
}

我想我只是陷入了某种让我困惑的思维方式。如果有人能解释清楚那将是最有帮助的!

最佳答案

对象数据库试图提供与内存中对象相同的语义。经验法则是:它像内存中的对象一样工作。对象数据库存储数据库中对象之间的引用。当您更新对象时,该对象就是更新。如果您有对该对象的引用,您会看到更改后的版本。

在您的例子中,问题对象指的是人员对象。当您更新那个人时,所有引用它的问题都会“看到”该更新。

当然,像 int、strings、longs 等原始类型被当作值对象而不是引用对象来处理。此外,在 db4o 中,数组的处理方式类似于值对象,这意味着数组与对象一起存储,而不是作为引用。其他一切都存储为引用,甚至像列表或字典这样的集合。

关于database - 来自关系数据库背景,我应该如何在 db4o(或任何对象数据库)中建模关系?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3452592/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com