如何设计DB表和Class?

时间:2012-11-12 08:14:07

标签: c#-4.0 design-patterns database-design

以下是我系统中的表结构。方案是,系统有客户端。客户可以 许多类型,例如:一个人,一个公司,一个银行等。我已经提供了如下数据库设计。

表:客户

===============================
| ID    | NAME_CODE | TYPE    |
-------------------------------
| 1000  | Martin    | PERSON  |
| 1002  | George    | PERSON  |
| 1003  | Max_Group | COMPANY |
-------------------------------

表:PERSON

==================================================
|  ID | CLIENT_ID  | FIRST_NAME   | LAST_NAME    |
--------------------------------------------------
| 1   | 1001       | Martin       | XXXXXXXXXXX  |
| 2   | 1002       | George       | XXXXXXXXXXX  |
--------------------------------------------------

表:公司

===================================================
| ID | CLIENT_ID  | NAME           | Location     |
---------------------------------------------------
| 1  | 1003       | Max Group Inc. | XXXXXXXXXXX  |
---------------------------------------------------

编辑:为PERSON和COMPANY表添加了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;
    //.........
}

我觉得上面的模型不合适。可以有一个正确的方法。 请建议我一个更好的方法。

1 个答案:

答案 0 :(得分:2)

经过一番讨论,我觉得你的桌子设计得很好。

我会这样设计你的桌子:

表:客户

==============================
| ID   | NAME_CODE | TYPE    |
------------------------------
| 1    | Martin    | 1       |
| 2    | George    | 1       |
| 3    | Max_Group | 2       |
------------------------------

其中Type是枚举,而不是任何硬编码,以便查询更快。

表:PERSON

============================================
| CLIENT_ID  | FIRST_NAME   | LAST_NAME    |
--------------------------------------------
| 1          | Martin       | XXXXXXXXXXX  |
| 2          | George       | 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;
    //.........
}

Client表现在具有每个客户端实体的父ID。它可以通过为个人和银行提供个人ID然后在父客户端表中引用外键来反转,我相信从db的角度来看更容易操作(如果你想要{{3} })。但是在应用程序中我喜欢继承和多态,所以我对db设计的直接修改是我发布的。