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 に答える