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”作为模板进行注入。你有什么建议?是的,我想建议你。客户机必须是抽象的,因为它本身并不意味着什么。我测试不彻底,所以我不知道