0

我有一个正在运行的应用程序,它的实体可能是:CustomerType1、CustomerType2 和 CustomerType3。

所有三个 CustomerType 实体可能具有完全不同的信息,但它们都有一个 CustomerID 字段,它是一个整数。

我试图弄清楚如何进行设置,以便无论创建哪种类型,CustomerID 在所有三种类型中都将始终是唯一的,并且仍然是整数。

例如,创建以下内容将导致以下 CustomerID

客户类型 1 - 1

客户类型 1 - 2

客户类型 1 - 3

客户类型 2 - 4

客户类型 1 - 5

客户类型 3 - 6

客户类型 1 - 7

解决这个问题的最佳方法是什么?

4

2 回答 2

0

2种可能的方法:

  1. 为所有客户类型使用一个表,并使用“鉴别器”字段来跟踪每个客户类型,并将 CustomerID 作为其身份。
  2. 使用外部表来管理将 CustomerID 创建为身份字段。

第一种方法的优点是在以下教程中概述的实体框架中具有直接支持:

http://www.asp.net/mvc/tutorials/getting-started-with-ef-using-mvc/implementing-inheritance-with-the-entity-framework-in-an-asp-net-mvc-application

请注意,尽管您的客户类型可能包含不同的数据,但从长远来看,尽管浪费了数据库空间,但这种方法在可扩展性方面最终可能会更便宜。在您的业务层中,客户类型可以简单地忽略不属于他们的字段。

第二种方法可能最适合添加到难以更改的现有应用程序中。从长远来看,以这种方式跟踪 ID 涉及更多工作。一方面,您的业务层需要从一个表中获取一个 ID 才能插入到另一个表中,这对于大型数据集来说可能很昂贵。根据业务层的要求,可能还存在您必须丢弃未使用的 CustomerID 而系统中根本不存在的情况(例如,您将从 CustomerID 58 跳到 CustomerID 60)。

于 2012-05-01T15:46:22.103 回答
0

您的方法类似于在网络数据库中具有相同的实体类型,具有唯一的 ID。

通常,许多开发人员使用 UID 或相关类型。它是一种具有 64、128 或更多位数的类型,并且它是随机自动生成的。如果在不同的机器上使用相同的数据库,几乎不可能得到相同的值。

一些数据库将该值存储为字符串,而不是整数。

如果您只有一个带有整数键的表,您如何生成主键值?自动的 ?您是否在代码中生成值,然后分配给主键字段?

解决方案 1

如果您的数据库支持作为整数自动生成的 UID 或 OID 或唯一标识符,请使用它们。

解决方案 2

如果您的数据库支持 UID 或 OID 作为 varchar / string,或者您使用的数据库引擎或程序具有生成 UID 的函数,您可以使用该函数,将结果值从字符串转换为整数,(剥离分隔符,如“ -"),并存储在整数主键字段中。

概括

许多开发人员更喜欢让数据库引擎在插入新记录时自动生成主键。在这种情况下,最好在代码中生成主键并直接分配它。由于您使用的是“实体框架”,我忽略了该库如何处理主键。

干杯。

于 2012-05-01T15:25:22.260 回答