Primary Keys

Collapse
This topic is closed.
X
X
 
  • Time
  • Show
Clear All
new posts
  • LurfysMa

    #1

    Primary Keys

    Most of the reference books recommend autonum primary keys, but the
    Access help says that any unique keys will work.

    What are the tradeoffs?

    I have several tables that have unique fields. Can I use them as
    primary keys or should I define an autonum primary key?

    One table has information about the 50 states in the US. The table
    looks like this:

    State Capitol Date Admitted
    Alabama Montgomery December 14, 1819
    Alaska Juneau January 3, 1959
    Arizona Phoenix February 14, 1912

    Since the state names are unique, is there any reason not to make that
    field the primary key?

    Another table has to do with grade school multiplication tables. This
    is a simple table something like this:

    Factors Answer
    1x1 1
    2x1 2
    2x2 4
    3x1 3
    3x2 6
    3x3 9
    ...
    12x1 12
    12x2 24
    ...
    12x12 144

    Here again, the Factors field (a text field) is unique. Is there any
    reason not to use it as the primary key?

    In both cases, the tables are small, so adding another 4-byte field is
    no big deal, but I'd like to keep the tables as simple as possible
    unless there is some downside.

    Thanks

    --
    Running MS Office 2000 Pro on Win2000
  • Amy Blankenship

    #2
    Re: Primary Keys

    In my opinion, you're asking for trouble if you ever show the user the
    primary key or if you might ever want to edit that information. Since
    primary keys are normally the way you establish relationships, you don't
    want them to ever change once a record has been created. Even though you
    may think the key value won't change, typos have been known to happen.
    Also, number fields take up less space in the database and primary keys, as
    the source of the relationship, are typically repeated over and over in many
    tables.

    Therefore, I always use autonumbers. Other opinions vary.

    HTH;

    Amy

    "LurfysMa" <invalid@invali d.invalidwrote in message
    news:1f8ab25mq1 8uhqv6ml1qo5lu4 gj782i53d@4ax.c om...
    Most of the reference books recommend autonum primary keys, but the
    Access help says that any unique keys will work.
    >
    What are the tradeoffs?
    >
    I have several tables that have unique fields. Can I use them as
    primary keys or should I define an autonum primary key?
    >
    One table has information about the 50 states in the US. The table
    looks like this:
    >
    State Capitol Date Admitted
    Alabama Montgomery December 14, 1819
    Alaska Juneau January 3, 1959
    Arizona Phoenix February 14, 1912
    >
    Since the state names are unique, is there any reason not to make that
    field the primary key?
    >
    Another table has to do with grade school multiplication tables. This
    is a simple table something like this:
    >
    Factors Answer
    1x1 1
    2x1 2
    2x2 4
    3x1 3
    3x2 6
    3x3 9
    ...
    12x1 12
    12x2 24
    ...
    12x12 144
    >
    Here again, the Factors field (a text field) is unique. Is there any
    reason not to use it as the primary key?
    >
    In both cases, the tables are small, so adding another 4-byte field is
    no big deal, but I'd like to keep the tables as simple as possible
    unless there is some downside.
    >
    Thanks
    >
    --
    Running MS Office 2000 Pro on Win2000

    Comment

    • LurfysMa

      #3
      Re: Primary Keys

      On Wed, 12 Jul 2006 11:48:27 -0500, "Amy Blankenship"
      <Amy_nospam@mag noliamultimedia .comwrote:
      >In my opinion, you're asking for trouble if you ever show the user the
      >primary key
      Why is merely showing the user the primary key a problem?

      --
      Running MS Office 2000 Pro on Win2000

      Comment

      • RoyVidar

        #4
        Re: Primary Keys

        Most of the reference books recommend autonum primary keys, but the
        Access help says that any unique keys will work.
        >
        What are the tradeoffs?
        >
        I have several tables that have unique fields. Can I use them as
        primary keys or should I define an autonum primary key?
        >
        One table has information about the 50 states in the US. The table
        looks like this:
        >
        State Capitol Date Admitted
        Alabama Montgomery December 14, 1819
        Alaska Juneau January 3, 1959
        Arizona Phoenix February 14, 1912
        >
        Since the state names are unique, is there any reason not to make
        that field the primary key?
        >
        Another table has to do with grade school multiplication tables. This
        is a simple table something like this:
        >
        Factors Answer
        1x1 1
        2x1 2
        2x2 4
        3x1 3
        3x2 6
        3x3 9
        ...
        12x1 12
        12x2 24
        ...
        12x12 144
        >
        Here again, the Factors field (a text field) is unique. Is there any
        reason not to use it as the primary key?
        >
        In both cases, the tables are small, so adding another 4-byte field
        is no big deal, but I'd like to keep the tables as simple as possible
        unless there is some downside.
        >
        Thanks
        I'd recommend you to take the time to use your favourite search engine
        for the terms like "natural vs surrogate primary key". Such search
        will
        probably list some of the pros and cons, in addition to hours of fun
        ;-)

        Basically, some favours usage of surrogate keys (Autonumber), others
        favours natural keys, which represents "things" having a business
        meaning, and which can also be a combination of fields. Some (including
        me) will use both, based upon the requirements. For state, I'd probably
        use the two letter code.

        Just be aware - for some this isn't just a matter of preference, it's
        religion to a degree thats close to fanatism.

        Just be sure that if you decide upon surrogate key (Autonumber), then
        remember that this will not ensure the integrity of your data! It will
        only ensure that each record has a unique number. Say in a table where
        you have a unique field, but you decide to add an Autonumber field for
        primary key, you will need to also add a unique index on the "natural
        key" field in addition to the primary key index on the Autonumber
        field,
        else you'll risk dupes.

        --
        Roy-Vidar


        Comment

        • Amy Blankenship

          #5
          Re: Primary Keys

          Because by user I mean people other than the developer who might be charged
          with maintaining your data. When you show something to that type of user,
          you lay it open to being changed. Here's a full discussion of the issue


          "LurfysMa" <invalid@invali d.invalidwrote in message
          news:4naab29a2j tsda1ecc6k2umes i533v0v4j@4ax.c om...
          On Wed, 12 Jul 2006 11:48:27 -0500, "Amy Blankenship"
          <Amy_nospam@mag noliamultimedia .comwrote:
          >
          >>In my opinion, you're asking for trouble if you ever show the user the
          >>primary key
          >
          Why is merely showing the user the primary key a problem?
          >
          --
          Running MS Office 2000 Pro on Win2000

          Comment

          • Albert D.Kallal

            #6
            Re: Primary Keys

            State Capitol Date Admitted
            Alabama Montgomery December 14, 1819
            Alaska Juneau January 3, 1959
            Arizona Phoenix February 14, 1912
            >
            Since the state names are unique, is there any reason not to make that
            field the primary key?
            Yes, there are several good reasons. First, you might find some spelling
            errors. You might come out with a French version. Or, someone wants the
            names to be spelled in German, or whatever tickles your fancy. If you use a
            autonumber, and then start using a description for the State in place of the
            name, then your database can continue to function without modification.

            As others mentioned, there is much philosophy and strong views on each side
            of the camp (natural keys vs autonumber keys).

            My view is that when you relate a table, I simply want the database to

            please give me a relation between those two tables I specify. At that
            point, I give NOT one hoot about what field is used, and in fact I don't
            even want to waste my brain power coming up with a field to create the
            relaton. I want a one to many relaton. What you do after that is your
            business!!

            Here is my rant on this subject. It also explains why you don't every want
            to expose the autonumber to the end user.

            Be forewarned...th is is a old post..and is a rant..but, it gives you the
            idea of how much fervor can go into the subject...

            ----------------

            Why would you EVE"R care what id ms-access uses for the relation?

            Do you care what memory segment word gets loaded into? Do you
            care if it is memory segment 32, or 8192?

            Are you now to ask users with a prompt as to what memory locaton that your
            word document will load into? Who cares..that junk is for comptuers to deal
            with...not humans...


            Who cares about a number you, and your users will NEVER see?

            An autonumber is some mechanistic to generate a number. To you and me, all
            we care about is that we have a relation from customers to customers invoice
            table. Do we really care, or have to know what number is used?

            Really, when word loads into memory, we don't care about the number used for
            the memory location. Really, when ms-access has a relation between customers
            and the invoice file...again we don't give a hoot about what number is used.
            Me, or you never sees the segment number when word loads, and we as users
            will never see the autonumber either.

            These numbers are NOT for humans to see.....

            There is a ZILLION kinds of internal numbers that your computer uses all day
            to function. Why do you care what memory segment numbers the computer used
            to load ms-access, or ms-word? Why care?

            If your folks can see, or use those autonumbers...t hen that is your problem
            with autonumbers.

            The real wrong being done here is that users can see, or use the
            autonumbers. I mean, do you want ms-word to start showing you the memory
            segment numbers it uses to load a document into memory? It would be crazy to
            force users to deal with memory segment numbers when using word.

            With ms-access, YOU NOW are the software developer. So, just like those
            developers who creased word, they don't show users what memory location the
            documents load into. You as a developer has a responsibly to NOT LET USERS
            see the autonumber.

            If you need some number for your users, then you need to write your own
            custom code that generates those numbers for human consumption (say, things
            like invoice number etc.). You do NOT want to use the invoice number for
            relations etc (you still use a internal autonumber, and that way you don't
            even care if the invoice has a invoice number, or perhaps you wait a
            specified time until a invoice number is given. Either way, you can still
            have your relational database function...but behind the scenes it is using a
            autonumber).

            Your database should not crap out just because you don't have a order number
            handy. Who even cares if you enter a order number, or not? Why should your
            database stop function if you don't enter a order number? Even if you change
            the order number, again..why should your database not work? Maybe you need
            to delete the order number? (again, what on planet earth does deleing some
            arbitrary number like the order number HAVE ANYTHING to do with building a
            functional relation between two tables? How possibility does these two
            separate concepts have anything in common?).

            You users should NEVER EVER see a autonumber.

            You mistake here is to try and let humans see, or even refer to, or use the
            autonumber in any way. Autonumbers are NOT to be given meaning by
            humans...but ONLY to your software.

            Who cars if you have a order number, or not? What does the fact of having a
            order number have to do with your database to functionally correctly? If you
            want to require that a order number HAS to be entered, then make the order
            number a required field, but that simple stupid order number HAS NOTING to
            do with setting up a relation between two tables.

            Setup your relation between tables with internal numbers, and your database
            will JUST WORK REGARDLESS of what fields, and things you decide to store as
            data. Do not go and attached some number out of the blue like a stupid order
            number to build relations between your tables. Can you imagine if products
            like QuickBooks, or even products like ms-word exposed internal numbers used
            for relations and other internal numbers as to how the software will
            function? Software uses ZILLIONS AND ZILLIONS of internal numbers and
            pointers to function.

            Now that YOU ARE the software developer, it is up to you to hide these
            numbers. You can expose these internal numbers (like autonumbers), but that
            is just rude, and just services to torture your users. Hide all the internal
            number stuff....every other developer before you did this....

            Why expose users to the exhaust pipe of a car when all they want to do is
            drive? Software is a machine you build. Build it...make it work, and then
            give it to your users. Users do NOT need to know about the kinds of teeth
            used in the gears for the car...

            So, the two concepts of how relations works is that many of us just believe
            that setting up a relation between two tables is a conceptual idea, and HAS
            NOTING to do with the data that you need to store. Others would disagree on
            this concept...

            By the way, there are some STRONG augments for using natural keys. For
            example, if I adopt a natural key in my data, then can freely move it
            between TWO DIFFERENT systems that respect this approach. (of course, you
            have to have those two systems respect that approach!!).


            --
            Albert D. Kallal (Access MVP)
            Edmonton, Alberta Canada
            pleaseNOOSpamKa llal@msn.com





            Comment

            • Lyle Fairfield

              #7
              Re: Primary Keys

              LurfysMa wrote:
              Most of the reference books recommend autonum primary keys, but the
              Access help says that any unique keys will work.
              >
              What are the tradeoffs?
              >
              I have several tables that have unique fields. Can I use them as
              primary keys or should I define an autonum primary key?
              >
              One table has information about the 50 states in the US. The table
              looks like this:
              >
              State Capitol Date Admitted
              Alabama Montgomery December 14, 1819
              Alaska Juneau January 3, 1959
              Arizona Phoenix February 14, 1912
              >
              Since the state names are unique, is there any reason not to make that
              field the primary key?
              >
              Another table has to do with grade school multiplication tables. This
              is a simple table something like this:
              >
              Factors Answer
              1x1 1
              2x1 2
              2x2 4
              3x1 3
              3x2 6
              3x3 9
              ...
              12x1 12
              12x2 24
              ...
              12x12 144
              >
              Here again, the Factors field (a text field) is unique. Is there any
              reason not to use it as the primary key?
              >
              In both cases, the tables are small, so adding another 4-byte field is
              no big deal, but I'd like to keep the tables as simple as possible
              unless there is some downside.
              >
              Thanks
              >
              --
              Running MS Office 2000 Pro on Win2000
              You could use whatever you want. IMO most of the criticism around this
              topic involves autonumbers being used as the primary key, and in
              addition, an attempt is made to use these autonumbers as ordinals,
              perhaps sequential invoice numbers, rather than merely nominals,
              identifiers of the records.
              Many developers routinely create an autonumber ID in every table as
              they create it. This, IMO, simplifies relationships (they are always
              (ID, ID) where ID = ID), and ensures that a unique identifier exists
              for each record, without concern for any meaning, duplication or
              possible nullability of that identifier (Access forms often are not
              updateable unless such an identifier exists).
              But if one has the concepts and skill, other primary keys are fine. Of
              course, many may not have the skill, and those who do will often choose
              autonumbers to standardize their approach to this matter.
              I use autonumbers. There are sufficient things to be planned and
              decided about db design without including ... what will my primary keys
              look like.

              BTW, some think of Primary Key as something "special". A primary key is
              simply the first created non-nullable unique index. Designating an
              index as primary will move it to position one (or return an error). We
              could easily do away with this term; I worked with indexes ( a thousand
              times more powerful and useful than JET or SQL-Server indexes) for many
              many years in the X-Base world without ever hearing it and I find no
              particular value in its availability.

              Comment

              • rkc

                #8
                Re: Primary Keys

                LurfysMa wrote:
                Most of the reference books recommend autonum primary keys, but the
                Access help says that any unique keys will work.
                >
                What are the tradeoffs?
                The tradeoff is that some people will think you're an
                idiot if you use them and some people will think you're
                an idiot if you don't.

                As long as you understand that adding an autonumber
                as a primary key has nothing to do with the normalization
                process I think they are just fine.

                Comment

                • Tony Toews

                  #9
                  Re: Primary Keys

                  RoyVidar <roy_vidarNOSPA M@yahoo.nowrote :
                  >Just be aware - for some this isn't just a matter of preference, it's
                  >religion to a degree thats close to fanatism.
                  <chuckle>

                  Tony
                  --
                  Tony Toews, Microsoft Access MVP
                  Please respond only in the newsgroups so that others can
                  read the entire thread of messages.
                  Microsoft Access Links, Hints, Tips & Accounting Systems at

                  Comment

                  • (PeteCresswell)

                    #10
                    Re: Primary Keys

                    Per LurfysMa:
                    >What are the tradeoffs?
                    Two tradeoffs in favor of surrogate keys that I haven't heard mentioned yet:
                    ------------------------------------------------------------------
                    1) What looked unique yesterday may turn out not to be today.
                    U.S. social security number being a case in point. You'd *think*
                    that there won't be any dupes, but over the long run there will be.
                    For instance in a charitable endowment environment, the same SSN may
                    identify both a person and a legal entity that manages money - and
                    if people and legal entities have the same properties in that app,
                    you'll run into problems using SSN as a PK. And then there is the
                    issue of people with bogus SSNs....

                    2) For me, at least - who has only a limited number of brain cells available -
                    it's convenient when coming back to maintain an app that I haven't looked
                    at in a year or more not to have to figure out what natural relationships
                    exist and how/why. All I have to do deal with is "...ID".
                    ------------------------------------------------------------------
                    --
                    PeteCresswell

                    Comment

                    • polite person

                      #11
                      Re: Primary Keys

                      On Thu, 13 Jul 2006 07:41:09 -0400, "(PeteCresswell )" <x@y.Invalidwro te:
                      >Per LurfysMa:
                      >>What are the tradeoffs?
                      >
                      >Two tradeoffs in favor of surrogate keys that I haven't heard mentioned yet:
                      >------------------------------------------------------------------
                      >1) What looked unique yesterday may turn out not to be today.
                      U.S. social security number being a case in point. You'd *think*
                      that there won't be any dupes, but over the long run there will be.
                      For instance in a charitable endowment environment, the same SSN may
                      identify both a person and a legal entity that manages money - and
                      if people and legal entities have the same properties in that app,
                      you'll run into problems using SSN as a PK. And then there is the
                      issue of people with bogus SSNs....
                      >
                      >2) For me, at least - who has only a limited number of brain cells available -
                      it's convenient when coming back to maintain an app that I haven't looked
                      at in a year or more not to have to figure out what natural relationships
                      exist and how/why. All I have to do deal with is "...ID".
                      >------------------------------------------------------------------
                      However, if two records are the same apart from the value of the surrogate key this is surely an
                      error (duplicate record), so you need to keep an eye on this in some way or other.

                      Comment

                      • hbinc

                        #12
                        Re: Primary Keys

                        Hi LurfysMa

                        Nice discussions.
                        Every record that has an relation with other records in other tables,
                        must have an unique identification, that used in all the relations. As
                        long as the "meaning" of the record stays the same, this identification
                        stays the same. Whether it is Autonumbering or Random or whatever is
                        not important, as long as it is unique.

                        Independant of the the identification is what you choose as Primary
                        Key. This may be your unique identification, but in fact can be any
                        combination of any fields, as long as they do not contain null-values.

                        But if you use a non-Autonumbering Primary Key, be sure that you use
                        your unique identification in your relations!

                        HBInc.



                        LurfysMa wrote:
                        Most of the reference books recommend autonum primary keys, but the
                        Access help says that any unique keys will work.
                        >
                        What are the tradeoffs?
                        >
                        I have several tables that have unique fields. Can I use them as
                        primary keys or should I define an autonum primary key?
                        >
                        One table has information about the 50 states in the US. The table
                        looks like this:
                        >
                        State Capitol Date Admitted
                        Alabama Montgomery December 14, 1819
                        Alaska Juneau January 3, 1959
                        Arizona Phoenix February 14, 1912
                        >
                        Since the state names are unique, is there any reason not to make that
                        field the primary key?
                        >
                        Another table has to do with grade school multiplication tables. This
                        is a simple table something like this:
                        >
                        Factors Answer
                        1x1 1
                        2x1 2
                        2x2 4
                        3x1 3
                        3x2 6
                        3x3 9
                        ...
                        12x1 12
                        12x2 24
                        ...
                        12x12 144
                        >
                        Here again, the Factors field (a text field) is unique. Is there any
                        reason not to use it as the primary key?
                        >
                        In both cases, the tables are small, so adding another 4-byte field is
                        no big deal, but I'd like to keep the tables as simple as possible
                        unless there is some downside.
                        >
                        Thanks
                        >
                        --
                        Running MS Office 2000 Pro on Win2000

                        Comment

                        • (PeteCresswell)

                          #13
                          Re: Primary Keys

                          Per polite person:
                          >However, if two records are the same apart from the value of the surrogate key this is surely an
                          >error (duplicate record), so you need to keep an eye on this in some way or other.
                          I do it by creating additional unique keys - concatenating whatever indexed
                          need tb concatted.
                          --
                          PeteCresswell

                          Comment

                          • David W. Fenton

                            #14
                            Re: Primary Keys

                            polite person <snip@snippers. comwrote in
                            news:b1ecb2tnlv c972dalokdhrh6i 0665n3hhs@4ax.c om:
                            However, if two records are the same apart from the value of the
                            surrogate key this is surely an error (duplicate record), so you
                            need to keep an eye on this in some way or other.
                            Why is it that those who make this point against surrogate keys
                            always assume complete stupidity about the maintenance of unique
                            indexes on the part of those who use the surrogate keys?

                            --
                            David W. Fenton http://www.dfenton.com/
                            usenet at dfenton dot com http://www.dfenton.com/DFA/

                            Comment

                            • Rick Brandt

                              #15
                              Re: Primary Keys

                              David W. Fenton wrote:
                              polite person <snip@snippers. comwrote in
                              news:b1ecb2tnlv c972dalokdhrh6i 0665n3hhs@4ax.c om:
                              >
                              However, if two records are the same apart from the value of the
                              surrogate key this is surely an error (duplicate record), so you
                              need to keep an eye on this in some way or other.
                              >
                              Why is it that those who make this point against surrogate keys
                              always assume complete stupidity about the maintenance of unique
                              indexes on the part of those who use the surrogate keys?
                              I think making such an assumption about anyone asking these kinds of questions
                              concerning primary keys is a very safe one to make. The truth is that most
                              Access users (not developers) don't have a clue about basic database design and
                              such warnings are very much warranted.


                              --
                              Rick Brandt, Microsoft Access MVP
                              Email (as appropriate) to...
                              RBrandt at Hunter dot com


                              Comment

                              Working...