C# 类结构应该镜像数据库结构吗?

C# 类结构应该镜像数据库结构吗?,c#,postgresql,C#,Postgresql,对不起,如果这是努比什,但我是新的发展,我正在自学 假设我有两张桌子 生物数据 名称(字符串) 生日(日期时间) 血型(int) 血型 血型ID(int) 血型名称(字符串) 当我提取一个记录时,我将使用一个连接,这样我就可以提取BloodTypeName而不仅仅是ID 现在,我的类结构是否应该反映这些表,或者我是否可以安全地使用这些表构建一个“Person”类 public class Person { string Name; DateTime Birthdate; string

对不起,如果这是努比什,但我是新的发展,我正在自学

假设我有两张桌子

生物数据
名称(字符串)
生日(日期时间)
血型(int)

血型
血型ID(int)
血型名称(字符串)

当我提取一个记录时,我将使用一个连接,这样我就可以提取BloodTypeName而不仅仅是ID

现在,我的类结构是否应该反映这些表,或者我是否可以安全地使用这些表构建一个“Person”类

public class Person {
  string Name;
  DateTime Birthdate;
  string BloodType;
}
如果我像上面所说的那样构建类,那么在将记录插入ByDB时,似乎我必须做一些有趣的事情,因为我想向用户显示BloodTypeName,但我必须将相关的整数插入DB


任何关于最佳实践的见解都将不胜感激。

我将区分显示类和数据类


数据类必须具有数据库中存在的任何和所有信息,才能对其进行更改。现在,如果希望向用户显示特定信息,可以编写显示类,这些类只包含所需的特定信息。然后,您只需映射它们,或者您自己映射,或者通过使用库映射,例如,我自己使用它,它非常方便,并且会占用您大量的工作量。

我假设您正在使用RDBMS系统来处理数据库,并且您将使用OOP方法来处理您的类结构。如果你坚持这两种方法的核心原则,你会很好

没有必要混合使用这些方法。因此=>不要镜像这些结构。这样建立一个Person类很好

安德鲁。。 是的,它应该反映数据库结构

如果你还在学习,你可以开始阅读LINQ Tech,它几乎完成了你所问的大部分工作,希望它能帮助你,
关于..

不,如果您有充分的理由不这样做,它绝对不应该镜像数据库结构

有时数据类会精确地镜像数据库,但这并不是因为它们必须相同,而是因为没有理由使它们不同。使类镜像数据库使得数据层更简单,但是一旦有不同的方式对类进行建模,就应该考虑是否对数据库进行镜像使得使用类变得更难。 在这种情况下,如果必须在单独的操作中获取血型名称,那么显然效率较低。除了person类之外,您可能还需要一个血型类(例如,如果您希望用所有可能的血型填充下拉列表),但是当您获取person对象的数据时,您还应该获取血型名称

或者,您可以获取血型的id和名称以及此人的数据,并创建血型对象以存储在person对象中:

public class BloodType {
  int Id;
  string Name;
}

public class Person {
  string Name;
  DateTime Birthdate;
  BloodType BloodType;
}

因此,在这种情况下,镜像db结构似乎更有效。@Andreweins:这取决于如何使用这些类。如果根本没有理由创建一个单独的血型类,那么就不应该仅仅因为数据库看起来是这样就创建一个血型类。