GoodLuck يوللانغان ۋاقتى 2011-12-4 18:16:18

oracle دا تەرتىپ بىر تەرەپ قىلىش مەسىلىسى

ئادەتتە MySQ ياكى SqlServer  دا بىر Id بېكىتىپ شۇنى باش كونۇپكا يەنى 主键  قىلغان بولساق، بۇ Id غا كېيىن قىممەت بېرىشىمىزنىڭ زۆرۆرىيىتى بوق، يېڭى ئۇچۇر قاتساق بۇ Id نىڭ قىممىزى ئۈزلۈكسىز ھالدا، ئاپتوماتىك قوشۇلۇپ ماڭىدۇ،  بۇنى كۆپىنچىمىز بىلىمىز. لېكىن Oracle دا ئىش بۇنداق ئەمەسكەن، بۇنىڭ ئۈچۈن تەرتىپ قۇرۇپ، شۇ قۇرۇلوغان تەرتىپنى ئىشلىتىدىكەنمىز.


مەسىلەن تۆۋەندىكى كودقا قارايلى:


create sequence SEQ


increment by 1


start with 1


nomaxvalue


minvalue 1


nocycle


cache 50


@misran  ماۋۇ تەھرىرلىگۈچنىڭ كود ھالەتتە كۆرسىتىش ئىقتىدارى يوقمۇ ياكى مەن بىلمىدىممۇ


دېمەك يۇقارقى كودتا SEQ نامىدا بىر تەرتىپ قويىۋالدۇق، كېيىن مەلۇم Id غا قىممەت بەرمەكچى بولساق SEQ.nextval ئۇسۇلى بويىچە قىممەت بېرىدىكەنمىز.


مەن ھەل قىلماقچى بولغان مەسىلە:  بۇ خىل ئۇسۇلدا مەلۇم بىر جەدۋەلدىكى Id غا قىممەت بېرىپ بولغاندىن كېيىن، يەنە بىر جەدۋەلگە SEQ.nextval  ئارقىلىق قىممەت بەرسەك، ئالدىنقى جەدۋەلگە بەرگەن قىممەتنىڭ داۋامىدىن باشلاپ، نۆۋەتتىكى جەدۋەلگە قىممەت بېرىدىكەن. بۇنداق بولغاندا Id دا قىممەت ئاتلاپ كېتىش (يەنى تەرتىپلىك بولماسلىق، مەسىلەن 10 نىڭ كەينىدىن 55 كېلىپ قېلىش) مەسىلى كېلىپ چىقىدىكەن.  بۇنىڭ ئۈچۈن ھەر بىر جەدۋەلگە بىر دانە تەرتىپ قۇرۇشىمىز كېرەكمۇ ياكى، باشقا ئۇسۇل بارمۇ؟


ئۇستازلار يول كۆرسەتكەن بولساڭلار .

kamandaz يوللانغان ۋاقتى 2011-12-4 23:36:22

IDنى نېمىشقا چوقۇم رەت تەرتىپ بويىچە كەلمىسە بولمامدا؟ ID پەقەت بىردىن بىر خاسلىقنى ئىپادىلىسىلا بولمىدىمۇ؟ ئەگەر چوقۇم رەت تەرتىپ بويىچە قىلىمەن دېسەڭلار پروگرامما تىلى بىلەن Idراۋۇتىدىن بىرنى قۇرۇپ شۇنى IDغا كىرگۈزۈپ ئىشلەتسىڭىز بولىدۇ. ئادەتتە Java بىلەن C# تا بۇ زاۋۇت تەمىنلەگلىك. بۇنى UUID دەپ ئاتايدۇ String تىپىدا.

kamandaz يوللانغان ۋاقتى 2011-12-4 23:38:44

ئادەتتە IDنى  ئاپتۇماتىك قوشۇپ ماڭىدىغان قىلغاندىن. UUID ئەۋزەلرەك .

GoodLuck يوللانغان ۋاقتى 2011-12-5 10:12:54

2- قەۋەتتىكى kamandazنىڭ يازمىسىدىن نەقىل

ئادەتتە IDنى ئاپتۇماتىك قوشۇپ ماڭىدىغان قىلغاندىن. UUID ئەۋزەلرەك .

مەن UUID  نى ئىشلىتىپ باقماپتىكەنمەن، مۇمكىن بولسا مۇشۇ ھەقتە مىساللىرى بىلەن بىر چەشەنچە بېرەمسىز؟

kamandaz يوللانغان ۋاقتى 2011-12-5 13:45:15

3- قەۋەتتىكى goodluckنىڭ يازمىسىدىن نەقىل

2- قەۋەتتىكى kamandazنىڭ يازمىسىدىن نەقىل

ئادەتتە IDنى ئاپتۇماتىك قوشۇپ ماڭىدىغان قىلغاندىن. UUID ئەۋزەلرەك .

مەن UUID  نى ئىشلىتىپ باقماپتىكەنمەن، مۇمكىن بولسا مۇشۇ ھەقتە مىساللىرى بىلەن بىر چەشەنچە بېرەمسىز؟


ئادەتتە ساندان تەرەپتە IDنى (varchar(35 ئۇزۇنلىقتا تەڭشەپ ئۇنى 主键 قىلىپ تەڭشىگەندىن كېيىن .  Java ياكى C# تا پروگرامما يازغاندا UUID ھاسىل قىلىپ شۇنى ID غا ساقلىسىڭىز بولىدۇ.


java دا UUID ئادەتتە util بوقچىسىنىڭ ئىچىدە بولىدۇ.   يەنە   util.UUID دېگەن تۈرشۇ.


بۇنى ئىشلەتكەندە UUID نىڭ randomUUID دېگەن مىتوتى ئارقىلىق قۇرسىڭىز بولىدۇ.


UUID uuid=UUID.randomUUID بۇ ئارقىلىق uuid غا ئىرىشىمىز ئاندىن بۇنى String غا ئايلاندۇرۇپ  ساندان دېكى id غا ساقلىساق بولىدۇ.



C# تا UUIDغا  ()System.Guid.NewGuid ئارقىلىق ئىرىشىمىز. ئاندىن بۇنى String غا ئايلاندۇرۇپ سانداندېكى id غا ساقلىساق بولىدۇ.



ئۇنىڭدىن باشقا نۇرغۇنلىغان 3-تەرەپ پروگگىرامما ئاچقۇچىلارمۇ UUID تەمىنلىگەن. سىز قايسىنى ئىشلەتسىڭىز بولاۋىرىدۇ. پەرق چوڭ ئەمەس.



ھازىر مەيلى oracle شىركىتى بولسۇن، مەيلى microsoft بولسۇن، ياكى google بولسۇن ھەممىسى مۇشۇ UUID نى ئىشلىتىشنى تەۋسىيە قىلىدۇ. بىخەتەرلىكىمۇ ساندان ئاپتۇماتىك قۇشۇپ ھاسىللىغان id دىن كۆپ يۇقىرى.  

GoodLuck يوللانغان ۋاقتى 2011-12-5 17:14:37

بىلۋالدىم، رەھمەت سىزگە .
بەت: [1]
: oracle دا تەرتىپ بىر تەرەپ قىلىش مەسىلىسى