我有一个运行的应用程序,其实体可能是:CustomerType1,CustomerType2和CustomerType3。
所有三个CustomerType实体可能具有完全不同的信息,但它们都具有一个整数的CustomerID字段。
我正在试图弄清楚如何设置,这样无论创建哪种类型,CustomerID在所有三种类型中始终是唯一的,并且保持整数。
例如,创建以下内容将导致以下CustomerID
CustomerType1 - 1
CustomerType1 - 2
CustomerType1 - 3
CustomerType2 - 4
CustomerType1 - 5
CustomerType3 - 6
CustomerType1 - 7
最好的方法是什么?
答案 0 :(得分:0)
您的方法类似于在网络数据库中具有相同的实体类型,具有唯一ID。
通常,许多开发人员使用UID或相关类型。它是一种具有64位,128位或更多位数的类型,它是随机生成的。如果在不同的机器中使用相同的数据库,则获得相同的值几乎是不可能的。
某些数据库将该值存储为字符串,而不是整数。
如果您只有一个包含整数键的表,那么如何生成主键值?自动?您是否在代码中生成了值,后来又分配给了主键字段?
解决方案1
如果您的数据库支持U.I.D.或O.I.D.或作为整数自动生成的唯一标识符,使用它们。
解决方案2
如果您的数据库支持U.I.D.或O.I.D.作为varchar / string,或者你使用的数据库引擎或程序,有一个生成UID的函数,你可以使用该函数,将结果值从string转换为整数,(剥离像“ - ”这样的分隔符),并存储在整数主键字段。
<强>摘要强>
许多开发人员喜欢在插入新记录时让数据库引擎自动生成主键。在这种情况下,喜欢这样,更好的是,在代码中生成主键,并直接分配它。由于您使用的是“实体框架”,因此我忽略了该库如何处理主键。
干杯。
答案 1 :(得分:0)
2种可能的方法:
第一种方法的优点是可以在实体框架中获得直接支持,如下面的教程所述:
请注意,虽然您的客户类型可能包含不同的数据,但从长远来看,尽管浪费了数据库空间,但这种方法最终可能会更便宜。在您的业务层中,客户类型可以简单地忽略与它们无关的字段。
第二种方法可能最适合添加到难以更改的现有应用程序。从长远来看,通过这种方式跟踪ID会涉及更多工作。例如,您的业务层将需要从一个表中获取ID以便插入到另一个表中,这对于大型数据集来说可能是昂贵的。根据业务层的要求,可能还有一些情况需要丢弃未使用的CustomerID,而系统中根本不存在(例如,您可以从CustomerID 58跳到CustomerID 60)。