1

我们正在使用 L2S,我们有一个这样的类:

public class HumanContainer
{
    public List<IHuman> Humans { get; set; }
    public string SomeOtherProperty { get; set; }
}

我们的数据库有这样的表:
HumanContainer
- Geek

到目前为止,我们只有一种人类(极客)。当我们向/从数据库发送/检索 HumanContainers 时,我们知道将它们视为 Geek。现在我们需要第二个人类(运动员),我们可以选择如何实现它。

一种选择是在数据库中创建另一个表(运动员):
HumanContainer
- Geek
- Athlete

对于像这样的每个新的具体 Human,我们需要遍历 HumanContainer.Humans,检测类型,将其添加到适当的 EntitySet<>,然后保存。

另一种选择是只为所有人类提供一个表:
HumanContainer
- Humans

如果我们这样做,那么我们将需要类似 XML 列的东西,我们将 Human 序列化为其特定类型并将其存储在该列中。然后我们需要在检索数据时反序列化该列。

是否推荐其中一种方法?我很想知道人们是如何处理这种情况的。有没有我没有在这里列出的第三种方法?

4

2 回答 2

1
于 2012-09-14T16:01:16.133 回答
1

我正确理解你的问题,在你的情况下,未来可能会有不同类型的人。您可以尝试以下解决方案。

解决方案1:

正如您提到的,仅在数据库“Humas”中创建一个表并将 Human 序列化为特定类型并将其存储在该列中,并在检索数据时反序列化该列。这个解决方案看起来不错,因为如果将来需要任何人类类型,我们不需要更改数据库设计。并且易于管理。

但是这种方案的缺点是,如果应用程序只需要 Geek Humans 类型,那么首先需要检索列数据并对其进行反序列化,然后我们才能找到 Geek Humans 类型。

解决方案2:

在数据库中创建两个表。1) HumanType:用于保存人类的类型(Geek、Athlete 或任何其他类型) 2) Human:存储人类信息。该表包含 HumanType 的引用键。

该解决方案的优点是您可以轻松地根据需求触发查询(例如,只有极客类型的人可以轻松地从表中获取)。如果有任何新的人类类型出现,则需要一个条目进入人类类型数据库。

于 2012-09-14T18:15:52.277 回答