回答

收藏

SQL Server中数据库范围内的唯一但简单标识符

技术问答 技术问答 114 人阅读 | 0 人回复 | 2023-09-13

我想要简单的UID,以便我的用户可以轻松地通过电话传达此信息:4 T* n3 M* H$ L% u
, A: J4 b+ c, T  B# i. F
您好,我在1584号订单上遇到了问题
* p1 n; |' b; N% t2 N" T. w) V

' \7 h4 `; ]3 X相对于- f# D) t$ F( W  F

* a: U8 @7 n- H; O你好,我在订购4daz33-d4gerz384867-8234878-14时遇到问题5 a3 R5 }' ]8 V, u$ e8 O5 a* x8 M
8 d4 N4 O- }/ H+ Z; s
我希望它们是唯一的(数据库范围内的),因为我有几种不同的“对象”……有订单ID,交货ID和帐单ID,并且由于它们之间没有一对一的关系,我无法猜测ID指的是哪种对象。
7 P) G. s+ R& g3 F: o: n使用数据库范围内的唯一ID,我可以立即说出客户所指的对象。我的用户只需在搜索工具中输入一个ID,我便为他保存了额外的单击以进一步完善所需的内容。3 p1 ?2 F" Z! [8 T, u
我当前的想法是使用具有不同种子1、2、3等且增量值为100的标识列。
# u, S% Q7 _% T; s; a; h' v7 h但这引起了一些问题:! Q$ M$ m+ N$ T$ [3 b& E

' n0 G5 O! p# q8 y6 y4 K, k/ }如果我最终得到100种以上的对象类型,该怎么办?当然可以使用1000或10000,但是缩放效果不好的“气味”
6 L3 Y7 x/ \9 M# ^; V5 Z  G. ~! f% f9 d2 P
种子是否有可能“丢失”(在复制,数据库问题等期间)?. r8 ?' a0 H4 D! h( z
3 q2 X! ?6 S0 p/ K' F4 b+ {2 V
更一般而言,还有其他我应该注意的问题吗?
5 O. s  X, A6 [2 W  V. s3 t' [
; ?5 b/ L% C3 e: F: Y) P是否可以使用非整数(我目前使用bigints)作为标识列,以便为ID加上表示对象类型的前缀?(例如varchar列)/ t) {! C  O8 f$ a$ a5 t# _
8 O. Q5 I% D8 G2 ^" G
使用仅包含标识列和对象类型的“主表”是一个好主意,以便在需要新主意时可以在其中插入一行。我觉得这可能有点矫kill过正,而且恐怕会使我的所有插入请求变得复杂。加上我不查看数据库便无法确定对象类型的事实' T1 u; C; E: ?1 O; x$ p
! b) A9 h. [! P/ W- g; U
还有其他聪明的方法可以解决我的问题吗?+ j* q; P& u" W8 H  W: W# ~

. Y" j/ X% W4 _! P' O, ]

- ]1 U2 G$ {3 B, L1 E* \               
1 r7 p& J+ o( L. }$ k+ J解决方案:6 V. O# y  ^$ e* b6 d
               
! F; I" \& {% l9 \
+ V7 s) @) u, K/ o2 E2 m* m. U' G, [/ \+ Q/ }
                为什么不在所有表上使用身份,但是在您向用户展示身份时,只需在类型上加上一个字符就可以了?例如O1234是订单,D123213是交货等等?这样一来,您不必设计一些疯狂的方案…
分享到:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则