ËùνÖ÷¼ü¾ÍÊÇÄܹ»Î¨Ò»±êʶ±íÖÐijһÐеÄÊôÐÔ»òÊôÐÔ×飬һ¸ö±íÖ»ÄÜÓÐÒ»¸öÖ÷¼ü£¬µ«¿ÉÒÔÓжà¸öºòÑ¡Ë÷Òý¡£ÒòΪÖ÷¼ü¿ÉÒÔΨһ±êʶijһÐмǼ£¬ËùÒÔ¿ÉÒÔÈ·±£Ö´ÐÐÊý¾Ý¸üС¢É¾³ýµÄʱºò²»»á³öÏÖÕŹÚÀî´÷µÄ´íÎó¡£
µ±È»£¬ÆäËü×ֶοÉÒÔ¸¨ÖúÎÒÃÇÔÚÖ´ÐÐÕâЩ²Ù×÷ʱÏû³ý¹²Ïí³åÍ»£¬²»¹ý¾Í²»ÔÚÕâÀïÌÖÂÛÁË¡£Ö÷¼ü³ýÁËÉÏÊö×÷ÓÃÍ⣬³£³£ÓëÍâ¼ü¹¹³É²ÎÕÕÍêÕûÐÔÔ¼Êø£¬·ÀÖ¹³öÏÖÊý¾Ý²»Ò»Ö¡£ËùÒÔÊý¾Ý¿âÔÚÉè¼ÆÊ±£¬Ö÷¼üÆðµ½Á˺ÜÖØÒªµÄ×÷Óá£
³£¼ûµÄÊý¾Ý¿âÖ÷¼üѡȡ·½Ê½ÓУº
¡ô×Ô¶¯Ôö³¤×Ö¶Î
¡ôÊÖ¶¯Ôö³¤×Ö¶Î
¡ôUniqueIdentifier
¡ô¡°COMB£¨Combine£©¡±ÀàÐÍ
Ò»¡¢×Ô¶¯Ôö³¤ÐÍ×Ö¶Î
ºÜ¶àÊý¾Ý¿âÉè¼ÆÕßϲ»¶Ê¹ÓÃ×Ô¶¯Ôö³¤ÐÍ×ֶΣ¬ÒòΪËüʹÓüòµ¥¡£×Ô¶¯Ôö³¤ÐÍ×Ö¶ÎÔÊÐíÎÒÃÇÔÚÏòÊý¾Ý¿âÌí¼ÓÊý¾Ýʱ£¬²»¿¼ÂÇÖ÷¼üµÄȡֵ£¬¼Ç¼²åÈëºó£¬Êý¾Ý¿âϵͳ»á×Ô¶¯ÎªÆä·ÖÅäÒ»¸öÖµ£¬È·±£¾ø¶Ô²»»á³öÏÖÖØ¸´¡£Èç¹ûʹÓÃSQL ServerÊý¾Ý¿âµÄ»°£¬ÎÒÃÇ»¹¿ÉÒÔÔڼǼ²åÈëºóʹÓÃ@@IDENTITYÈ«¾Ö±äÁ¿»ñȡϵͳ·ÖÅäµÄÖ÷¼ü¼üÖµ¡£
¾¡¹Ü×Ô¶¯Ôö³¤ÐÍ×ֶλáÊ¡µôÎÒÃǺܶ෱ËöµÄ¹¤×÷£¬µ«Ê¹ÓÃËüÒ²´æÔÚDZÔÚµÄÎÊÌ⣬ÄǾÍÊÇÔÚÊý¾Ý»º³åģʽÏ£¬ºÜÄÑÔ¤ÏÈÌîдÖ÷¼üÓëÍâ¼üµÄÖµ¡£¼ÙÉèÓÐÁ½ÕÅ±í£º
Order(OrderID, OrderDate)
OrderDetial(OrderID, LineNum, ProductID, Price)
Order ±íÖеÄOrderIDÊÇ×Ô¶¯Ôö³¤Ð͵Ä×ֶΡ£ÏÖÔÚÐèÒªÎÒÃǼÈëÒ»ÕŶ©µ¥£¬°üÀ¨ÔÚOrder±íÖвåÈëÒ»Ìõ¼Ç¼ÒÔ¼°ÔÚOrderDetail±íÖвåÈëÈô¸ÉÌõ¼Ç¼¡£ÒòΪOrder±íÖеÄOrderIDÊÇ×Ô¶¯Ôö³¤Ð͵Ä×ֶΣ¬ÄÇôÎÒÃÇÔڼǼÕýʽ²åÈëµ½Êý¾Ý¿â֮ǰÎÞ·¨ÊÂÏȵÃÖªËüµÄȡֵ£¬Ö»ÓÐÔÚ¸üкó²ÅÄÜÖªµÀÊý¾Ý¿âΪËü·ÖÅäµÄÊÇʲôֵ¡£Õâ»áÔì³ÉÒÔÏÂì¶Ü·¢Éú£º
Ê×ÏÈ£¬ÎªÁËÄÜÔÚ OrderDetailµÄOrderID×Ö¶ÎÖÐÌíÈëÕýÈ·µÄÖµ£¬±ØÐëÏȸüÐÂOrder±íÒÔ»ñÈ¡µ½ÏµÍ³ÎªÆä·ÖÅäµÄOrderIDÖµ£¬È»ºóÔÙÓÃÕâ¸ö OrderIDÌî³äOrderDetail±í¡£×îºó¸üÐÂOderDetail±í¡£µ«ÊÇ£¬ÎªÁËÈ·±£Êý¾ÝµÄÒ»ÖÂÐÔ£¬OrderÓëOrderDetailÔÚ¸üÐÂʱ±ØÐëÔÚÊÂÎñ±£»¤ÏÂͬʱ½øÐУ¬¼´È·±£Á½±íͬʱ¸üÐгɹ¦¡£
ÌýÌÄ.NETÖ¸³ö£ºÖ÷µµ·ÅÔÚÊÂÎñÖÐÌύʱ£¬Í¨¹ý@@IDENTITY ¾Í¿ÉÒÔÈ¡µ½Éú³ÉÖµµÄ£¬Òò´Ë¿ÉÒÔ´«¸øÃ÷ϸµ±Íâ¼üÓ㬶øÇÒÔÚÊÂÎñ·¢Éú´íÎ󻨹öʱ£¬Ö÷µµ¼Ç¼Ҳ»á±»»Ø¹öÈ¡ÏûµÄ¡£
ÂÀÕðÓî²¹³ä£ºÊ¹ÓÃ×Ô¶¯Ôö³¤×ֶλáÔö¼ÓÍøÂçµÄroundTrip¡£¾¡¹Ü¿ÉÒÔʹÓÃ@@IDENTITYÈ¡µÃÖ÷¼üµÄÖµ£¬µ«ÔÚ¸üйý³ÌÖУ¬²»µÃ²»Ôö¼ÓÒ»´ÎÊý¾ÝÍù·µ£¨ÒÔC/S½á¹¹ÎªÀý£©£º
1¡¢¿Í»§¶Ë·¢ËÍ¿ªÊ¼ÊÂÎñÃüÁî
2¡¢¿Í»§¶ËÌá½»Ö÷±í¸üÐÂ
3¡¢·þÎñÆ÷·µ»Ø@@IDENTITY
4¡¢¿Í»§¶Ë¸ù¾Ý·µ»ØµÄÖ÷¼ü¸üÐÂ´Ó±í»º³å
5¡¢¿Í»§¶Ë½«´Ó±íÌá½»·þÎñÆ÷¸üÐÂ
6¡¢¿Í»§¶ËÌá½»ÊÂÎñ
ÔÚÕâÀï¶àÁËÒ»´ÎÍù·µ¾Í»áÔö¼ÓÁËÊÂÎñ´¦ÀíµÄʱ¼ä¡£½µµÍ²¢·¢ÐÔÄÜ¡£
Èç¹û²»ÓÃ×Ô¶¯Ôö³¤ÐÍ×ֶΣ¬½«ÊÇÒÔÏÂÇé¾°£º
1¡¢¿Í»§¶Ë·¢ËÍ¿ªÊ¼ÊÂÎñÃüÁî
2¡¢¿Í»§¶ËÌá½»Ö÷±í¸üÐÂ
3¡¢¿Í»§¶ËÌá½»´Ó±í¸üÐÂ
4¡¢¿Í»§¶ËÌá½»ÊÂÎñ
Òò´ËÎÒ²»ÔÞ³ÉʹÓÃ×Ô¶¯Ôö³¤ÐÍ×Ö¶Î×÷ΪÖ÷¼üÓëÍâ¼üÁ´½ÓµÄŦ´ø¡£
³ý´ËÖ®Í⣬µ±ÎÒÃÇÐèÒªÔÚ¶à¸öÊý¾Ý¿â¼ä½øÐÐÊý¾ÝµÄ¸´ÖÆÊ±£¨SQL ServerµÄÊý¾Ý·Ö·¢¡¢¶©ÔÄ»úÖÆÔÊÐíÎÒÃǽøÐпâ¼äµÄÊý¾Ý¸´ÖƲÙ×÷£©£¬×Ô¶¯Ôö³¤ÐÍ×ֶοÉÄÜÔì³ÉÊý¾ÝºÏ²¢Ê±µÄÖ÷¼ü³åÍ»¡£ÉèÏëÒ»¸öÊý¾Ý¿âÖеÄOrder±íÏòÁíÒ»¸ö¿âÖеÄOrder±í¸´ÖÆÊý¾Ý¿âʱ£¬OrderIDµ½µ×¸Ã²»¸Ã×Ô¶¯Ôö³¤ÄØ£¿
ADO.NETÔÊÐíÎÒÃÇÔÚ DataSetÖн«Ä³Ò»¸ö×Ö¶ÎÉèÖÃΪ×Ô¶¯Ôö³¤ÐÍ×ֶΣ¬µ«Ç§Íò¼Çס£¬Õâ¸ö×Ô¶¯Ôö³¤×ֶνö½öÊǸöռλ·û¶øÒÑ£¬µ±Êý¾Ý¿â½øÐиüÐÂʱ£¬Êý¾Ý¿âÉú³ÉµÄÖµ»á×Ô¶¯È¡´ú ADO.NET·ÖÅäµÄÖµ¡£ËùÒÔΪÁË·ÀÖ¹Óû§²úÉúÎó½â£¬½¨Òé´ó¼Ò½«ADO.NETÖеÄ×Ô¶¯Ôö³¤³õʼֵÒÔ¼°ÔöÁ¿¶¼ÉèÖóÉ-1¡£´ËÍ⣬ÔÚADO.NETÖУ¬ÎÒÃÇ¿ÉÒÔΪÁ½ÕÅ±í½¨Á¢DataRelation£¬ÕâÑù´æÔÚ¼¶Áª¹ØÏµµÄÁ½Õűí¸üÐÂʱ£¬Ò»Õűí¸üкóÁíÍâÒ»Õűí¶ÔÓ¦¼üµÄÖµÒ²»á×Ô¶¯·¢Éú±ä»¯£¬Õâ»á´ó´ó¼õÉÙÁËÎÒÃǶԴæÔÚ¼¶Áª¹ØÏµµÄÁ½±í¼ä¸üÐÂʱ×Ô¶¯Ôö³¤ÐÍ×ֶδøÀ´µÄÂé·³¡£
¶þ¡¢ÊÖ¶¯Ôö³¤ÐÍ×Ö¶Î
¼ÈÈ»×Ô¶¯Ôö³¤ÐÍ×Ö¶Î»á´øÀ´Èç´ËµÄÂé·³£¬ÎÒÃDz»·Á¿¼ÂÇʹÓÃÊÖ¶¯Ôö³¤Ð͵Ä×ֶΣ¬Ò²¾ÍÊÇ˵Ö÷¼üµÄÖµÐèÒª×Ô¼ºÎ¬»¤£¬Í¨³£Çé¿öÏÂÐèÒª½¨Á¢Ò»Õŵ¥¶ÀµÄ±í´æ´¢µ±Ç°Ö÷¼ü¼üÖµ¡£»¹ÓÃÉÏÃæµÄÀý×ÓÀ´Ëµ£¬Õâ´ÎÎÒÃÇн¨Ò»Õűí½ÐIntKey£¬°üº¬Á½¸ö×ֶΣ¬KeyNameÒÔ¼°KeyValue¡£¾ÍÏñÒ»¸öHashTable£¬¸øÒ»¸ö KeyName£¬¾Í¿ÉÒÔÖªµÀĿǰµÄKeyValueÊÇʲô£¬È»ºóÊÖ¹¤ÊµÏÖ¼üÖµÊý¾ÝµÝÔö¡£ÔÚSQL ServerÖпÉÒÔ±àдÕâÑùÒ»¸ö´æ´¢¹ý³Ì£¬ÈÃÈ¡¼üÖµµÄ¹ý³Ì×Ô¶¯½øÐС£´úÂëÈçÏ£º
CREATE PROCEDURE [GetKey]@KeyName char(10), @KeyValue int OUTPUT
AS UPDATE IntKey SET @KeyValue = KeyValue = KeyValue + 1 WHERE KeyName = @KeyName GO
ÕâÑù£¬Í¨¹ýµ÷Óô洢¹ý³Ì£¬ÎÒÃÇ¿ÉÒÔ»ñµÃ×îмüÖµ£¬È·±£²»»á³öÏÖÖØ¸´¡£Èô½«OrderID×Ö¶ÎÉèÖÃΪÊÖ¶¯Ôö³¤ÐÍ×ֶΣ¬ÎÒÃǵijÌÐò¿ÉÒÔÓÉÒÔϼ¸²½À´ÊµÏÖ£ºÊ×Ïȵ÷Óô洢¹ý³Ì£¬»ñµÃÒ»¸öOrderID£¬È»ºóʹÓÃÕâ¸öOrderIDÌî³äOrder±íÓëOrderDetail±í£¬×îºóÔÚÊÂÎñ±£»¤Ï¶ÔÁ½±í½øÐиüС£
ʹÓÃÊÖ¶¯Ôö³¤ÐÍ×Ö¶Î×÷ΪÖ÷¼üÔÚ½øÐÐÊý¾Ý¿â¼äÊý¾Ý¸´ÖÆÊ±£¬¿ÉÒÔÈ·±£Êý¾ÝºÏ²¢¹ý³ÌÖв»»á³öÏÖ¼üÖµ³åÍ»£¬Ö»ÒªÎÒÃÇΪ²»Í¬µÄÊý¾Ý¿â·ÖÅ䲻ͬµÄÖ÷¼üȡֵ¶Î¾ÍÐÐÁË¡£µ«ÊÇ£¬Ê¹ÓÃÊÖ¶¯Ôö³¤ÐÍ×ֶλáÔö¼ÓÍøÂçµÄRoundTrip£¬ÎÒÃDZØÐëͨ¹ýÔö¼ÓÒ»´ÎÊý¾Ý¿â·ÃÎÊÀ´»ñÈ¡µ±Ç°Ö÷¼ü¼üÖµ£¬Õâ»áÔö¼ÓÍøÂçºÍÊý¾Ý¿âµÄ¸ºÔØ£¬µ±´¦ÓÚÒ»¸öµÍËÙ»ò¶Ï¿ªµÄÍøÂç»·¾³ÖÐʱ£¬ÕâÖÖ×ö·¨»áÓкܴóµÄ±×¶Ë¡£Í¬Ê±£¬ÊÖ¹¤Î¬»¤Ö÷¼ü»¹Òª¿¼ÂDz¢·¢³åÍ»µÈÖÖÖÖÒòËØ£¬Õâ¸ü»áÔö¼ÓϵͳµÄ¸´Ôӳ̶ȡ£
Èý¡¢Ê¹ÓÃUniqueIdentifier
SQL ServerΪÎÒÃÇÌṩÁËUniqueIdentifierÊý¾ÝÀàÐÍ£¬²¢ÌṩÁËÒ»¸öÉú³Éº¯ÊýNEWID( )£¬Ê¹ÓÃNEWID( )¿ÉÒÔÉú³ÉÒ»¸öΨһµÄUniqueIdentifier¡£UniqueIdentifierÔÚÊý¾Ý¿âÖÐÕ¼ÓÃ16¸ö×Ö½Ú£¬³öÏÖÖØ¸´µÄ¸ÅÂʷdz£Ð¡£¬ÒÔÖÁÓÚ¿ÉÒÔÈÏΪÊÇ0¡£ÎÒÃǾ³£´Ó×¢²á±íÖп´µ½ÀàËÆ{45F0EB02-0727-4F2E-AAB5-E8AEDEE0CEC5}µÄ¶«Î÷ʵ¼ÊÉϾÍÊÇÒ»¸öUniqueIdentifier£¬WindowsÓÃËüÀ´×öCOM×é¼þÒÔ¼°½Ó¿ÚµÄ±êʶ£¬·ÀÖ¹³öÏÖÖØ¸´¡£ÔÚ.NETÀï¹ÜUniqueIdentifier³ÆÖ®ÎªGUID£¨Global Unique Identifier£©¡£ÔÚC#ÖпÉÒÔʹÓÃÈçÏÂÃüÁîÉú³ÉÒ»¸öGUID£º
Guid u = System.Guid.NewGuid();
¶ÔÓÚÉÏÃæÌáµ½µÄOrderÓëOrderDetailµÄ³ÌÐò£¬Èç¹ûÑ¡ÓÃUniqueIdentifier×÷ΪÖ÷¼üµÄ»°£¬ÎÒÃÇÍêÈ«¿ÉÒÔ±ÜÃâÉÏÃæÌáµ½µÄÔö¼ÓÍøÂç RoundTripµÄÎÊÌ⡣ͨ¹ý³ÌÐòÖ±½ÓÉú³ÉGUIDÌî³äÖ÷¼ü£¬²»Óÿ¼ÂÇÊÇ·ñ»á³öÏÖÖØ¸´¡£
UniqueIdentifier ×Ö¶ÎÒ²´æÔÚÑÏÖØµÄȱÏÝ£ºÊ×ÏÈ£¬ËüµÄ³¤¶ÈÊÇ16×Ö½Ú£¬ÊÇÕûÊýµÄ4±¶³¤£¬»áÕ¼ÓôóÁ¿´æ´¢¿Õ¼ä¡£¸üΪÑÏÖØµÄÊÇ£¬UniqueIdentifierµÄÉú³ÉºÁÎÞ¹æÂÉ¿ÉÑÔ£¬ÒªÏëÔÚÉÏÃæ½¨Á¢Ë÷Òý£¨¾ø´ó¶àÊýÊý¾Ý¿âÔÚÖ÷¼üÉ϶¼ÓÐË÷Òý£©ÊÇÒ»¸ö·Ç³£ºÄʱµÄ²Ù×÷¡£ÓÐÈË×ö¹ýʵÑ飬²åÈëͬÑùµÄÊý¾ÝÁ¿£¬Ê¹Óà UniqueIdentifierÐÍÊý¾Ý×öÖ÷¼üÒª±ÈʹÓÃIntegerÐÍÊý¾ÝÂý£¬ËùÒÔ£¬³öÓÚЧÂÊ¿¼ÂÇ£¬¾¡¿ÉÄܱÜÃâʹÓÃUniqueIdentifierÐÍÊý¾Ý¿â×÷ΪÖ÷¼ü¼üÖµ¡£
ËÄ¡¢Ê¹Óá°COMB£¨Combine£©¡±ÀàÐÍ
¼ÈÈ»ÉÏÃæÈýÖÖÖ÷¼üÀàÐÍѡȡ²ßÂÔ¶¼´æÔÚ¸÷×ÔµÄȱµã£¬ÄÇôµ½µ×ÓÐûÓкõİ취¼ÓÒÔ½â¾öÄØ£¿´ð°¸Êǿ϶¨µÄ¡£Í¨¹ýʹÓÃCOMBÀàÐÍ£¨Êý¾Ý¿âÖÐûÓÐCOMBÀàÐÍ£¬ËüÊÇJimmy NilssonÔÚËûµÄ¡°The Cost of GUIDs as Primary Keys¡±Ò»ÎÄÖÐÉè¼Æ³öÀ´µÄ£©£¬¿ÉÒÔÔÚÈýÕßÖ®¼äÕÒµ½Ò»¸öºÜºÃµÄƽºâµã¡£
COMB Êý¾ÝÀàÐ͵Ļù±¾Éè¼ÆË¼Â·ÊÇÕâÑùµÄ£º¼ÈÈ»UniqueIdentifierÊý¾ÝÒòºÁÎÞ¹æÂÉ¿ÉÑÔÔì³ÉË÷ÒýЧÂʵÍÏ£¬Ó°ÏìÁËϵͳµÄÐÔÄÜ£¬ÄÇôÎÒÃÇÄܲ»ÄÜͨ¹ý×éºÏµÄ·½Ê½£¬±£ÁôUniqueIdentifierµÄǰ10¸ö×Ö½Ú£¬Óúó6¸ö×Ö½Ú±íʾGUIDÉú³ÉµÄʱ¼ä£¨DateTime£©£¬ÕâÑùÎÒÃǽ«Ê±¼äÐÅÏ¢Óë UniqueIdentifier×éºÏÆðÀ´£¬ÔÚ±£ÁôUniqueIdentifierµÄΨһÐÔµÄͬʱÔö¼ÓÁËÓÐÐòÐÔ£¬ÒÔ´ËÀ´Ìá¸ßË÷ÒýЧÂÊ¡£Ò²ÐíÓÐÈ˻ᵣÐÄ UniqueIdentifier¼õÉÙµ½10×Ö½Ú»áÔì³ÉÊý¾Ý³öÏÖÖØ¸´£¬Æäʵ²»Óõ£ÐÄ£¬ºó6×Ö½ÚµÄʱ¼ä¾«¶È¿ÉÒÔ´ïµ½1/300Ã룬Á½¸öCOMBÀàÐÍÊý¾ÝÍêÈ«ÏàͬµÄ¿ÉÄÜÐÔÊÇÔÚÕâ1/300ÃëÄÚÉú³ÉµÄÁ½¸öGUIDǰ10¸ö×Ö½ÚÍêÈ«Ïàͬ£¬Õ⼸ºõÊDz»¿ÉÄܵģ¡ÔÚSQL ServerÖÐÓÃSQLÃüÁÕâһ˼·ʵÏÖ³öÀ´±ãÊÇ£º
DECLARE @aGuid UNIQUEIDENTIFIERSET @aGuid = CAST(CAST(NEWID() AS BINARY(10)) + CAST(GETDATE() AS BINARY(6)) AS UNIQUEIDENTIFIER)
¾¹ý²âÊÔ£¬Ê¹ÓÃCOMB×öÖ÷¼ü±ÈʹÓÃINT×öÖ÷¼ü£¬ÔÚ¼ìË÷¡¢²åÈë¡¢¸üС¢É¾³ýµÈ²Ù×÷ÉÏÈÔÈ»ÏÔÂý£¬µ«±ÈUnidentifierÀàÐÍÒª¿ìÉÏһЩ¡£¹ØÓÚ²âÊÔÊý¾Ý¿ÉÒԲο¼ÎÒ2004Äê7ÔÂ21ÈÕµÄËæ±Ê¡£
³ýÁËʹÓô洢¹ý³ÌʵÏÖCOMBÊý¾ÝÍ⣬ÎÒÃÇÒ²¿ÉÒÔʹÓÃC#Éú³ÉCOMBÊý¾Ý£¬ÕâÑùËùÓÐÖ÷¼üÉú³É¹¤×÷¿ÉÒÔÔÚ¿Í»§¶ËÍê³É¡£C#´úÂëÈçÏ£º
//================================================================ /**//// /// ·µ»Ø GUID ÓÃÓÚÊý¾Ý¿â²Ù×÷£¬Ìض¨µÄʱ¼ä´úÂë¿ÉÒÔÌá¸ß¼ìË÷ЧÂÊ /// /// COMB (GUID Óëʱ¼ä»ìºÏÐÍ) ÀàÐÍ GUID Êý¾Ý public static Guid NewComb() { byte[] guidArray = System.Guid.NewGuid().ToByteArray(); DateTime baseDate = new DateTime(1900,1,1); DateTime now = DateTime.Now; // Get the days and milliseconds which will be used to build the byte string TimeSpan days = new TimeSpan(now.Ticks - baseDate.Ticks); TimeSpan msecs = new TimeSpan(now.Ticks - (new DateTime(now.Year, now.Month, now.Day).Ticks));
// Convert to a byte array // Note that SQL Server is accurate to 1/300th of a millisecond so we divide by 3.333333 byte[] daysArray = BitConverter.GetBytes(days.Days); byte[] msecsArray = BitConverter.GetBytes((long)(msecs.TotalMilliseconds/3.333333));
// Reverse the bytes to match SQL Servers ordering Array.Reverse(daysArray); Array.Reverse(msecsArray);
// Copy the bytes into the guid Array.Copy(daysArray, daysArray.Le