Surrogate keys


After you have been building databases for a while, surrogate keys become second nature but many people do not know about them so I thought I should devote some time to them. In addition, a constant challenge is choosing between using an int or a uniqueidentifier (i.e. GUID) as a surrogate key and I thought this would be a great forum to get some feedback on when you should use one or the other.


Surrogate keys


One of the more useful database design strategies is to use surrogate keys. The idea is that instead of using, say, a social security number as an ID for people you use a completely artificial key (usually an int , bigint or a uniqueidentifier) called a surrogate key. In the database application, you may display and search on the natural key (social security number in this case) but all joins use the surrogate key.


 


There are a number of reasons for using surrogate keys but the main reason is to deal with change. Natural keys like social security numbers often change. If you do not plan carefully you may assume that, say, a person’s social security number will never change. Then reality sets in—a person’s social security number can change. Suddenly, you have to propagate that change to everywhere that you refer to a person. What happens when we run out of social security numbers and need to change the format? Suddenly, you have to convert a large amount of data and resize many rows. What happens when your company expands overseas where they have their own national ID system? Suddenly you have to rewrite a lot of code. However, if you had used a surrogate key instead then each of these scenarios would be much easier to deal with.


 


The other common reasons for using surrogate keys are to do with efficiency. In general, surrogate keys are significantly smaller than natural keys. Thus table rows and indexes will be smaller and comparisons quicker (although bookmarks complicate the picture). Since more data is in each disk page, table scans, index lookups and index scans will all go faster. Similarly, surrogate keys replicate faster and reduce backup times.


 


However, there are disadvantages to surrogate keys, which some people think outweigh their advantages. Surrogate keys can lead to more joins since a join is required back to a master table to get the natural key for a report. Surrogate keys make ad hoc queries harder to write since more joins are required and users must have a deeper understanding of the data. In addition, surrogate keys require the use of an extra uniqueness constraint instead of just the primary key constraint with an associated loss of efficiency.


 


I tend to favor the surrogate key approach unless there is a natural key that I think will never change and the key is a reasonable size. However, even in the space of representing detailed information about compiled programs, good natural keys are rare.


Should a surrogate key be an int or uniqueidentifier?


I still struggle with this issue. In a naïve way, an int or a bigint is the obvious choice at 4 or 8 bytes instead of 16 bytes with some nice support for table partitioning in SQL Server 2005. Also, integer based keys can be added sequentially and table appends are typically faster than table inserts. However, replication and database merging complicate the issue.


 


If there is no row GUID then merge replication will add one. Thus, if you are going to pay the cost anyway it is tempting to use a uniqueidentifier as the key. The disadvantage is that the row size of every table the ID occurs in will increase.


 


Related to the merge replication issue is the issue of generating keys in the middle or client tier. This is easier with a uniqueidentifier based key than an integer based key. There are numerous strategies for assigning integer key ranges but they complicate the logic and make the system less robust.


 


I tend to favor using bigint based keys unless I am sure the number of rows will be low. Although it hurts every time I do it. The databases I am working on may contain an unusually large number of rows so int based columns should be sufficient for most people.


Your thoughts please


Does all this match up with your experience? I would be interested in hearing people’s views on surrogate keys and in particular, the int or uniqueidentifier issue.


 


This posting is provided “AS IS” with no warranties, and confers no rights.


 


Comments (67)

  1. Anonymous says:

    My preference is the use of integer/bigint keys, but I’m mainly working on CMS and web systems without replication.

    Experience has shown me that clients get really pissed off (if they know what they want) when developers use guids for keys and these end up on URLs. They often wrap in emails and don’t look good on paper. When asked, the developers of these systems often think they have to use guids to be ‘enterprise’ developers, they can provide reasoning like that in your post.

    I guess you could (should) shield the user from these keys, but for Mort’s out there this is something that they are unlikely to invest time in.

  2. Anonymous says:

    I’ll preface this by saying "I ain’t no expert or nothin’," but I always use surrogate keys with one exception: a table with only two columns each of which is a foreign key to a surrogate in another table.

    For example, say the first table is A and its primary key is A_ID (identity 1,1). The second table is B and its primary key is B_ID (identity 1,1). The third table is C and its sole purpose is to associate rows in A to rows in B, each A may be associated to only one B but many A’s may be associate to a each B.

    The two columns in table C are A_ID and B_ID and the primary key I’ll use is the concatenation of the two.

    Is this correct?

    Honestly, I don’t know. It seems reasonable because I know A_ID and B_ID will never change and a unique constraint is required on the combination even if were to use a surrogate.

    What I can’t quite seem to noodle out is why this works, specifically, suppose A_ID has a value = "123" and B_ID has a value of "45," presumably the concatenated value for the primary key is "12345." But if a new row is added where A_ID is "12" and B_ID is "345" (concatenation = "12345") no primary key constraint violation is thrown.

    On the surface, those two numbers seem the same to me, but I suspect my trusty SQL friend views the value "123" for A_ID as something other than "123," like a_id.123, therefore the two concatenated primary keys are not "12345" (and therefore identical) but something akin to "a_id.123b_id.45" and "a_id.12b_id.345", or maybe it’s more like they’re delimited such as "123.45" and "12.345" or some sort of crap.

    Honestly, I don’t know, do you? If you do, I wish you’d tell me.

    All I know is it works and I can’t for the life of me figure out why it’d be better to use a surrogate on table C in the scenario I described above.

  3. Anonymous says:

    In the case described above.

    Why dont use a surrogate key (SID) in a relation table with two foreigns keys to another’s tables SID?

    You can make a good use of the uniqness of that relation elements to provide functionality over it, like update, delete. Inserts are equally implemented since SID are automatically generated.

    I support the use of SID since it gives a object ref-style to table tuples allowing automatic tools to generate functionalities that in other case with must program ad-hoc.

    I am actually working on a model based in SIDs in wich you could even perform replication schemes based on info stored on such SID.

  4. Anonymous says:

    I have been tempted to use the uniqueidentifier but shy away when I realise that queries off of ints and bigints are much more friendlier than uniqueidentifiers. with the right columns selected in queries it should be the way to go about. Its sad when you are forced to use merge replication in some cases, it becomes difficult managing the same codebase in different environments which may not have replication turned on

  5. Anonymous says:

    ヒマだょ…誰かかまってぉ…会って遊んだりできる人募集!とりあえずメール下さい☆ uau-love@docomo.ne.jp

  6. Anonymous says:

    カワイイ子ほど家出してみたくなるようです。家出掲示板でそのような子と出会ってみませんか?彼女たちは夕食をおごってあげるだけでお礼にHなご奉仕をしてくれちゃったりします

  7. Anonymous says:

    あなたは右脳派?もしくは左脳派?隠されたあなたの性格分析が3分で出来ちゃう診断サイトの決定版!合コンや話のネタにも使える右脳左脳チェッカーを試してみよう

  8. Anonymous says:

    セレブラブでは性欲のある男性を募集しています。セフレパートナーを探している20代・30代の女性たちが多数登録されています。セレブと遊びたい、Hがしたいという方は無料登録からどうぞ

  9. Anonymous says:

    セレブ達は一般の人達とは接する機会もなく、その出会う唯一の場所が「逆援助倶楽部」です。 男性はお金、女性はSEXを要求する場合が多いようです。これは女性に圧倒的な財力があるから成り立つことの出来る関係ではないでしょうか?

  10. Anonymous says:

    貴方のオ○ニーライフのお手伝い、救援部でHな見せたがり女性からエロ写メ、ムービーをゲットしよう!近所の女の子なら実際に合ってHな事ができちゃうかも!?夏に向けて開放的になっている女の子と遊んじゃおう

  11. Anonymous says:

    家出中でネットカフェやマンガ喫茶にいる女の子たちは、お金が無くなり家出掲示板で今晩泊めてくれる男性を探しています。ご飯を食べさせてあげたり泊めてあげることで彼女たちはHなお礼をしてくれる事が多いようです

  12. Anonymous says:

    当サイトは、みんなの「勝ち組負け組度」をチェックする性格診断のサイトです。ホントのあなたをズバリ分析しちゃいます!勝ち組負け組度には、期待以上の意外な結果があるかもしれません

  13. Anonymous says:

    男性が主役の素人ホストでは、男性のテクニック次第で女性会員様から高額な謝礼がもらえます。欲求不満な人妻や、男性と出会いが無い女性が当サイトで男性を求めていらっしゃいます。興味のある方はTOPページからどうぞ

  14. Anonymous says:

    エロ漫画やエロゲーなどでかわいい女の子が淫らな肉欲に溺れる様子をみて「こんなの現実にあるわけない」そう思った事ありませんか?それが当サイトでは現実に実現できるのです!羨ましさを憶えた2次元の中での出来事。あなたと同じように望む女の子が当サイトに集まっているのです

  15. Anonymous says:

    高級チェリーの夏は童貞卒業の夏です。セレブ達も童貞を卒業させたくてウズウズしながら貴方との出会いを待っています。そんなセレブ達に童貞を捧げ、貴方もハッピーライフを送ってみませんか

  16. Anonymous says:

    何回かメールして会える人一緒に楽しいことしょ?お給料もらったばかりだからご飯くらいならごちそうしちゃうょ♪ cha-a@docomo.ne.jp とりあえずメールくださぃ★

  17. Anonymous says:

    セレブラブではココロとカラダに癒しを求めるセレブ達と会って頂ける男性を募集しています。セレブ女性が集まる当サイトではリッチな彼女たちからの謝礼を保証、安心して男性はお金、女性は体の欲求を満たしていただけます。無料登録は当サイトトップページからどうぞ

  18. Anonymous says:

    家出中でお金が無く、ネットカフェを泊り歩いているSOS少女たちは、家出掲示板で泊めてくれたり遊んでくれる男性を探しています。泊めてあげたりすると彼女たちはHなお礼をしてくれるかもしれません。家出少女と遊びたい方は当サイトはどうぞ

  19. Anonymous says:

    あなたの精神年齢を占ってみよう!当サイトは、みんなの「精神年齢度」をチェックする性格診断のサイトです。精神年齢度には、期待以上の意外な結果があるかも??興味がある方はぜひどうぞ

  20. Anonymous says:

    マダムと甘い時間を過ごしてみませんか?性欲を持て余しているセレブたちは出張ホストサービスで男性を探し、セックスを求めているのです。ホスト希望の方なら容姿や年齢は一切不問!ご近所の女性を探して、多額の報酬をゲットしよう

  21. Anonymous says:

    楽しく、気持ちよく絶頂を味わえることで若い女性から熟女の女性まで幅広い世代で爆発的な人気がある、スローセックス。当サイトはプレイに興味がある、あるいは試してみたいけれど相手がいない…といった方の支援サイトです。当サイトでSEXパートナーを探してみませんか

  22. Anonymous says:

    夏真っ盛り!女の子は開放的な気分で一人エッチしたくてウズウズしてるっ!!貴方は女の子のオナ○ーを見て気分を高めてあげてネ!!もちろん、お手伝いしてもオッケーだよ!!さぁ、今すぐ女の子にアクセスしよっ

  23. Anonymous says:

    恋することって怖くないですか?最近ちょっと臆病になってて…そういうの抜きでえっちなことしたくて… lovely-i0709@docomo.ne.jp優しい人がいたらメール待ってます☆

  24. Anonymous says:

    さあ、今夏も新たな出会いを経験してみませんか?当サイトは円助交際の逆、つまり女性が男性を円助する『逆円助交際』を提供します。逆円交際を未経験の方でも気軽に遊べる大人のマッチングシステムです。年齢上限・容姿・経験一切問いません。男性の方は無料で登録して頂けます。貴方も新たな出会いを経験してみませんか

  25. Anonymous says:

    これから家出したい少女や、現在家出中の娘とそんな娘を助けたい人を繋げるSOS掲示板です。10代、20代の女の子が家庭内の問題などでやむなく家出している子が多数書き込みしています。女の子リストを見て彼女たちにアプローチしてみませんか

  26. Anonymous says:

    みんなの精神年齢を測定できる、メンタル年齢チェッカーで秘められた年齢がズバリわかっちゃう!かわいいあの子も実は精神年齢オバサンということも…合コンや話のネタに一度チャレンジしてみよう

  27. Anonymous says:

    童貞卒業を考えているなら、迷わずココ!今まで童貞とヤッた事がない女性というのは意外と多いものです。そんな彼女たちは一度童貞とやってみたいと考えるのは自然な事と言えるでしょう。当サイトにはそんな好奇心旺盛な女性たちが登録されています

  28. Anonymous says:

    素人ホストでは日頃のストレスを発散したい、もう一度恋がしたい、そういた女性が癒しを求めて登録されています。当サイトは癒やされたい女性・寂しい女性を癒やす男性が集うカップリングサイトです

  29. Anonymous says:

    熟女だって性欲がある、貴方がもし人妻とSEXしてお金を稼ぎたいのなら、一度人妻ワイフをご利用ください。当サイトには全国各地からお金持ちのセレブたちが集まっています。女性から男性への報酬は、 最低15万円からと決めております。興味のある方は一度当サイト案内をご覧ください

  30. Anonymous says:

    恥ずかしいけどやらしいことしたくてしょうがありません…誰か一緒にしてくれませんか?とりあえず連絡待ってます☆ cute.y.0902@docomo.ne.jp

  31. Anonymous says:

    女の子のオナニーを手伝って報酬をもらう仕事に興味はありませんか?新感覚SNSの当サイトで見るだけで3万円、お手伝いで5万円の高額アルバイトを始めてみたい方は当サイトへどうぞ。

  32. Anonymous says:

    家出娘や一人で寂しい子が書き込むSOS娘BBSでは彼女たちと遊んであげたり泊めてあげれる、優しい人を募集しています。見返りにHをしてくれる子も多く、いろんな理由がある少女があなたの助けを待っています。

  33. Anonymous says:

    話題の小向美奈子ストリップを盗撮!入念なボディチェックをすり抜けて超小型カメラで撮影した神動画がアップ中!期間限定配信の衝撃的映像を見逃すな

  34. Anonymous says:

    当サイトではリッチなセレブと割り切りでお付き合いしてくださる男性を募集しています。女性の性欲を満たし、高額報酬をもらって楽しく暮らしてみませんか?興味がある方はバイト感覚での1日登録もできる、安心の無料入会を今すぐどうぞ。

  35. Anonymous says:

    mixiで禁止された「出会い」コミュニティーが復活しているのをご存じですか?当サイトでは規制前の楽しかった頃のミクシーを再現しているという好評を頂いております。会員数も右肩上がりに増えていますので、興味のある方はぜひご覧ください

  36. Anonymous says:

    癒されたい女性や、寂しい素人女性を心も体も癒してあげるお仕事をご存じですか?女性宅やホテルに行って依頼主の女性とHしてあげるだけで高額の謝礼を手に入れる事が出来るのです。興味のある方は当サイトTOPページをご覧ください

  37. Anonymous says:

    最近してないし欲求不満です。一緒にいやらしいことしませんか?エッチには自信あるよ(笑) nyaon.chuki@docomo.ne.jp メール待ってるよ☆

  38. Anonymous says:

    最近TVや雑誌で紹介されている家出掲示板では、全国各地のネットカフェ等を泊り歩いている家出娘のメッセージが多数書き込みされています。彼女たちはお金がないので掲示板で知り合った男性の家にでもすぐに泊まりに行くようです。あなたも書き込みに返事を返してみませんか

  39. Anonymous says:

    あなたの性格を、動物に例えて占っちゃいます。もしかしたらこんな動物かも!?動物占いをうまく使って、楽しい人間関係を築いてください

  40. Anonymous says:

    当サイト、救援部では無料でオ○ニー動画を見ることができます。ご近所検索機能でリアルタイムオ○ニーを見るチャンスも高く、興奮間違いなしです。また、一人Hのお手伝いを希望されるセレブ女性もあり、お手伝いいただけた方には高額謝礼をお支払いしております。

  41. Anonymous says:

    家出中の女性や泊まる所が無い女性達がネットカフェなどで、飲み放題のドリンクで空腹を満たす生活を送っています。当サイトはそんな女性達をサポートしたいという人たちと困っている女性たちの為のサイトです

  42. Anonymous says:

    セレブ女性との割り切りお付き合いで大金を稼いでみませんか?女性に癒しと快楽、男性に謝礼とお互い満たしあえる当サイト、セレブラブはあなたの登録をお待ちしております。

  43. Anonymous says:

    誰か満足させてくれる人いませんか?めんどくさいこと抜きでしよっ♪ gu-gu-m@docomo.ne.jp とりあえずメールして☆

  44. Anonymous says:

    家出をして不安な少女の書込みが当、家出掲示板では増えています。泊まらせてあげたり、一日遊んであげるだけで彼女たちはあなたを神と呼び、精一杯のお礼をしてくれるはずです

  45. Anonymous says:

    あなたのゲーマー度を無料ゲーム感覚で測定します。15個の質問に答えるだけの簡単測定で一度遊んでみませんか?ゲームが得意な人もそうでない人もぜひどうぞ。

  46. Anonymous says:

    Hな女性たちは素人ホストを自宅やホテルに呼び、ひとときの癒しを求めていらっしゃいます。当サイトでは男性ホスト様の人員が不足しており、一日3〜4人の女性の相手をするホストもおられます。興味を持たれた方は当サイトにぜひお越しください

  47. Anonymous says:

    実は出会い系には…関係者用入り口があるのを知っていますか?広告主やスポンサー用に用意されたIDではサクラや業者が立ち入ることが出来ないようになっているのです。当サイトでは極秘に入手した関係者用URLが公開されています

  48. Anonymous says:

    男性はお金、女性は快楽を得る逆援助に興味はありませんか?お金を払っても性的欲求を満たしたいセレブ達との割り切り1日のお付き合いで当サイトでは大金を得ることができます。無料登録なのでアルバイト感覚でOK、詳しくはTOPページでどうぞ。

  49. Anonymous says:

    自分のほむぺ初公開でぇす。やっと完成したのでみんなに見てもらいたくて★カキコしました。意見ある方めぇるまってまぁす。 ggg.nj@docomo.ne.jp

  50. Anonymous says:

    セクース好きな女性が集まる★男性との性なる夜を求めた女性達が多数登録しております!セフレ出会いサイト☆セクフレ☆で夏休み中でヒマを持て余している女子○生から、刺激を求めるOLまでみんなまとめてオイシイ関係になっちゃおう

  51. Anonymous says:

    夏休みで気軽に家出する女子○生が急増しています。しかし家出したはいいものの泊る所やお金が無い彼女たちは、掲示板などで泊めてくれる男性を探す子も多いようです。当掲示板にも夏休みに入ってから通常の3倍以上のメッセージが寄せられています

  52. Anonymous says:

    あなたの真のH度を診断できるHチェッカー!コンパや飲み会で盛り上がること間違いなしのおもしろツールでみんなと盛り上がろう

  53. Anonymous says:

    今夏も新たな出会いを経験してみませんか?当サイトは円交の逆、つまり女性が男性を円助する『逆円交際』を提供します。未経験の方でも気軽に遊べる大人のマッチングシステムです。年齢上限・容姿・経験一切問いません。男性の方は無料で登録して頂けます。貴方も新たな出会いを経験してみませんか

  54. Anonymous says:

    今最もアツイバイトは人妻とのセフレ契約です。当サイトではお金を払ってでもセフレがほしい人妻が集まり、男性会員様との逆援生活を待っています。当サイトで欲求不満の女性との出会いをしてみませんか

  55. Anonymous says:

    素人ホストでは、男性のテクニック次第で女性会員様から高額な謝礼がもらえます。欲求不満な人妻や、男性と出会いが無い女性達が当サイトで男性を求めていらっしゃいます。興味のある方はTOPページからどうぞ

  56. Anonymous says:

    さゆのプロフィールが完成しましたぁ。記念すべき初プロフをネットに公開してみました。ドキドキしてるので優しい感想メールしてくれたら心和むかもでぇす po.tomoe.oq@docomo.ne.jp

  57. Anonymous says:

    当サイトではセレブ熟女の性欲を満たしてくれる男性に高額謝礼をお支払いし、デートや一晩のSEX、月契約など選べる逆援出会いの場を作っております。アルバイト感覚でもお待ちしておりますので当サイトで無料登録をどうぞ

  58. Anonymous says:

    カワイイ子ほど家出してあそんでみたくなるようです。家出掲示板でそのような子と出会ってみませんか?彼女たちは夕食をおごってあげるだけでお礼にHなご奉仕をしてくれちゃったりします

  59. Anonymous says:

    出会ぃも今は逆援助!オンナがオトコを買う時代になりました。当サイトでは逆援希望のセレブ女性が男性を自由に選べるシステムを採用しています。経済的に成功を収めた女性ほど金銭面は豊かですが愛に飢えているのです。興味のある方はどうぞ

  60. Anonymous says:

    即ハメセレブは完全無料でご利用できる出会いコミュニティです。今までにない実績で、あなたの希望に合った人をお探しします。毎月考えられない豪華なイベントを開催しているので出会いを保障します

  61. Anonymous says:

    夏真っ盛り!女の子は開放的な気分で一人Hしたくてウズウズしてるっ!貴方は女の子のオ○ニーを見て気分を高めてあげてネ!もちろん、お手伝いしてもオッケーだよ!さぁ、今すぐ救援部にアクセスしよっ

  62. Anonymous says:

    プロフ見て興味ある方は連絡ください。基本的には携帯依存症なぐらい携帯いじるのとかメールするの好きなのでまずはメアドから交換しましょう。仲良くなったら電話もおっけーなんでよろしくo.natyu.natyu.o@docomo.ne.jp

  63. Anonymous says:

    大好評の逆ナンイベントが毎週開催決定!素敵な出会いのきっかけ探し・アイナビにきませんか?積極的な出会いを求める人達なら無料参加OK!あなたもほんの少しの勇気で素敵な彼氏・彼女をGETしちゃおう!

  64. Anonymous says:

    夏休みで家出する女の子が急増しています。最初はマンガ喫茶やネットカフェで過ごすことが多いようですが、すぐにお小遣いが無くなり家出掲示板で泊めてくれたり遊んでくれる男性を探す子が多いようです。当サイトはそんな女の子達をサポートしたいという人たちと困っている女性たちの為のサイトです

  65. Anonymous says:

    当サイトは、みんなの「玉の輿度」をチェックする性格診断のサイトです。ホントのあなたをズバリ分析しちゃいます!玉の輿度チェッカーの診断結果には、期待以上の意外な結果があるかも

  66. Anonymous says:

    毎月10万円を最低ラインとする謝礼を得て、セレブ女性に癒しを与える仕事があります。無料登録した後はメールアプローチを待つだけでもOK、あなたもセレブラブで欲求を満たしあう関係を作ってみませんか

  67. Anonymous says:

    Surrogate key advantages are over inflated. Often designers blindly go for surrogate keys when good natural key is already available.