2

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

表:客户

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

表:人

==================================================
|  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;
    //.........
}

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

4

1 回答 1

2

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

我会这样设计你的桌子:

表:客户

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

枚举在哪里Type,而不是任何硬编码,以便查询更快。

表:人

============================================
| 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 的角度来看它更容易操作(如果你要进行组合,它可以很好地扩展)。但是在应用程序中我喜欢继承和多态性,所以我发布了直接将它用于数据库设计的内容。

于 2012-11-12T10:03:59.883 回答