以下是我系统中的表结构。方案是,系统有客户端。客户可以 许多类型,例如:一个人,一个公司,一个银行等。我已经提供了如下数据库设计。
表:客户
===============================
| 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;
//.........
}
我觉得上面的模型不合适。可以有一个正确的方法。 请建议我一个更好的方法。
答案 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设计的直接修改是我发布的。