跨多个实体同步 ID

本文关键字:同步 ID 实体 | 更新日期: 2023-09-27 18:33:00

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

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

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

例如,创建以下内容将导致以下客户 ID

客户类型1 - 1

客户类型1 - 2

客户类型1 - 3

客户类型2 - 4

客户类型1 - 5

客户类型3 - 6

客户类型1 - 7

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

跨多个实体同步 ID

2 种

可能的方法:

  1. 使用带有"鉴别器"字段的所有客户类型的单个表来跟踪每个客户类型,并将 CustomerID 作为其标识。
  2. 使用外部表管理将客户 ID 创建为标识字段。

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

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(例如,您可以从 CustomerID 58 跳到 CustomerID 60(。

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

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

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

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

解决方案 1

如果您的数据库支持 U.I.D. 或 O.I.D. 或唯一标识符(自动生成的整数(,请使用它们。

解决方案 2

如果您的数据库支持 U.I.D.

或 O.I.D. 作为 varchar/字符串,或者您使用的数据库引擎或程序具有生成 U.I.D. 的函数,则可以使用该函数,将结果值从字符串转换为整数(去除分隔符,如"-"(,并存储在整数主键字段中。

总结

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

干杯。