C# 4.0 如何设计数据库表和类?

C# 4.0 如何设计数据库表和类?,c#-4.0,design-patterns,database-design,C# 4.0,Design Patterns,Database Design,以下是我的系统中的表结构。场景是,系统有客户端。客户可以是 很多类型,例如:个人、公司、银行等。我有一个数据库设计,如下所示 表格:客户端 =============================== | ID | NAME_CODE | TYPE | ------------------------------- | 1000 | Martin | PERSON | | 1002 | George | PERSON | | 1003 | Max_Group

以下是我的系统中的表结构。场景是,系统有客户端。客户可以是 很多类型,例如:个人、公司、银行等。我有一个数据库设计,如下所示

表格:客户端

===============================
| ID    | NAME_CODE | TYPE    |
-------------------------------
| 1000  | Martin    | PERSON  |
| 1002  | George    | PERSON  |
| 1003  | Max_Group | COMPANY |
-------------------------------
==============================
| ID   | NAME_CODE | TYPE    |
------------------------------
| 1    | Martin    | 1       |
| 2    | George    | 1       |
| 3    | Max_Group | 2       |
------------------------------
表格:个人

==================================================
|  ID | CLIENT_ID  | FIRST_NAME   | LAST_NAME    |
--------------------------------------------------
| 1   | 1001       | Martin       | XXXXXXXXXXX  |
| 2   | 1002       | George       | XXXXXXXXXXX  |
--------------------------------------------------
============================================
| CLIENT_ID  | FIRST_NAME   | LAST_NAME    |
--------------------------------------------
| 1          | Martin       | XXXXXXXXXXX  |
| 2          | George       | XXXXXXXXXXX  |
--------------------------------------------
表格:公司

===================================================
| ID | CLIENT_ID  | NAME           | Location     |
---------------------------------------------------
| 1  | 1003       | Max Group Inc. | XXXXXXXXXXX  |
---------------------------------------------------
==============================================
| CLIENT_ID  | NAME           | Location     |
----------------------------------------------
| 3          | Max Group Inc. | XXXXXXXXXXX  |
----------------------------------------------
编辑:为个人和公司表添加了ID

如果有人能给我一个更好的结构,我欢迎

对于上面的结构,我需要创建类模型。以下是我创建的内容

class Client
{
   int ID;
   string NameCode;
}

class Person : Client
{
    int ID;
    int ClientId;
    string FirstName;
    stirng LastName;
    //........
}

class Company : Client
{
    int ID;
    int ClientId;
    string Name;
    string Location;
    //.........
}
我觉得上面的型号不合适。这可能有一个正确的方法。
请给我一个更好的建议。

经过讨论,我认为你们的桌子设计得很好

我会这样设计您的桌子:

表格:客户端

===============================
| ID    | NAME_CODE | TYPE    |
-------------------------------
| 1000  | Martin    | PERSON  |
| 1002  | George    | PERSON  |
| 1003  | Max_Group | COMPANY |
-------------------------------
==============================
| ID   | NAME_CODE | TYPE    |
------------------------------
| 1    | Martin    | 1       |
| 2    | George    | 1       |
| 3    | Max_Group | 2       |
------------------------------
其中,
Type
是一个枚举,而不是任何硬编码的对象,因此查询速度更快

表格:个人

==================================================
|  ID | CLIENT_ID  | FIRST_NAME   | LAST_NAME    |
--------------------------------------------------
| 1   | 1001       | Martin       | XXXXXXXXXXX  |
| 2   | 1002       | George       | XXXXXXXXXXX  |
--------------------------------------------------
============================================
| CLIENT_ID  | FIRST_NAME   | LAST_NAME    |
--------------------------------------------
| 1          | Martin       | XXXXXXXXXXX  |
| 2          | George       | XXXXXXXXXXX  |
--------------------------------------------
表格:公司

===================================================
| ID | CLIENT_ID  | NAME           | Location     |
---------------------------------------------------
| 1  | 1003       | Max Group Inc. | XXXXXXXXXXX  |
---------------------------------------------------
==============================================
| CLIENT_ID  | NAME           | Location     |
----------------------------------------------
| 3          | Max Group Inc. | XXXXXXXXXXX  |
----------------------------------------------
这些课程看起来像:

class Client
{
   int ID;
   string NameCode;
    //........
}

class Person : Client
{
    string FirstName;
    stirng LastName;
    //........
}

class Company : Client
{
    string Name;
    string Location;
    //.........
}

客户机表现在具有每个客户机实体的父id。可以通过为个人和银行设置个人id,然后在父客户机表中引用外键来扭转这种情况,我认为从db的角度来看,外键更容易操作(如果您选择的话,它的伸缩性很好)。但在应用程序中,我喜欢继承和多态性,因此我将其直接用于db设计。

客户机类型的数量是可变的吗?除了个人、银行和公司之外,您还会添加其他内容吗?不会。它在设计时是固定的。在这种情况下,为什么您需要一个客户表?是的,有很多类型的客户。最后都是客户。我需要为所有客户维护一个特定的ID,他们应该能够在其他表中的其他活动中引用。例如:另一个名为“JOB_REQUEST”的故事,它将引用客户机(ClientId)。使用此参考,我应该能够加载它的正确模型。你可以建议一个更好的方法。穆尼尔,最终它们对你来说都是不同的对象。它们可以是所有客户端,但这是应用程序逻辑的客户端。你为什么要为他们设置一个公共id字段?我的想法是为他们提供单独的id。要确保数据库端的
人员
银行
的id不同,需要做更多的工作(甚至可能会减慢查询速度),但没有什么大的好处。你看到什么好处了吗?是的,那就好了。我将在商业模式中使用这些类结构。我想我可以将类“Client”抽象化。我还可以在测试时使用类“Client”作为模板进行注入。你有什么建议?是的,我想建议你。客户机必须是抽象的,因为它本身并不意味着什么。我测试不彻底,所以我不知道