Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • World
  • Users
  • Groups
Skins
  • Light
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dark
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • Default (No Skin)
  • No Skin
Collapse
Code Project
  1. Home
  2. The Lounge
  3. Why do they insist on repeating the name of the table in the column name?

Why do they insist on repeating the name of the table in the column name?

Scheduled Pinned Locked Moved The Lounge
databasedesignquestion
84 Posts 32 Posters 10 Views 1 Watching
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • J Jorgen Andersson

    PIEBALDconsult wrote:

    But that can't always work, as when a table is self-referential

    That's true, But it doesn't make it any worse than using just ID as a fieldname.

    PIEBALDconsult wrote:

    or several fields refer to the same table.

    Don't get the problem here, would you mind to elaborate? Should probably mention that the standard to name the key, TableName + ID, applies to surrogate keys, not natural keys. For Compound keys or Composite keys I don't see the problem.

    People say nothing is impossible, but I do nothing every day.

    P Offline
    P Offline
    PIEBALDconsult
    wrote on last edited by
    #74

    Jörgen Andersson wrote:

    elaborate

    For example a table with two references to a User table, like Sender and Recipient -- in neither case is UserID an appropriate name for the field.

    J 1 Reply Last reply
    0
    • G Gary Huck

      With regard to database design: Is it just me or are there others out there who are driven nuts by repeating the table name in the column name. E.g., I see things like Widget_Attribute_Type.Widget_Attribute_Type_Id all the time when all that is needed is Widget_Attribute_Type.Id. Seems when I debate this with the DBA types and architects they use the same [similar] tired arguments.

      R Offline
      R Offline
      RafagaX
      wrote on last edited by
      #75

      It's a nuisance, the only permitted use for this in my systems is when, first, it's a foreign key, and second you can't come up with a better and more descriptive name.

      CEO at: - Rafaga Systems - Para Facturas - Modern Components for the moment...

      1 Reply Last reply
      0
      • W Worried Brown Eyes

        Eddy Vluggen wrote:

        The auto-increment is NEVER* my PK, but a simple unique-constraint on a field called "Id".

        Hi Eddy Do you mind me asking why? It's something I think about from time to time & can't find a killer argument either way - you seem to have found a way. I can see advantages & disadvantages in auto-increment as PK & unique identifying info as PK, but neither really 'wins' consistently. Regards, Stewart

        L Offline
        L Offline
        Lost User
        wrote on last edited by
        #76

        Stewart Judson wrote:

        Do you mind me asking why?

        Of course not, been planning an article on the subject for some time. Short answer; if an identity would suffice, then the database-software would have abstracted it away, adding it automagic to each table-definition. Ages ago, we had non-normalized lists on our computers. Very soon we noticed things like double (or triple) entries, describing the same entity. You've probably seen a database where a customer was entered twice. Normalization (among other things) state that any record in the table should have a key to uniquely identify it. Follow the normalization-rules, and you end up with some tables having a very large compound key. Still, I consider that my primary key, that's the collection of fields that I can tell the end-user to look at to differentiate between the records he sees. Each record describes a "thing" in the real world. A table is a collection of those thingies, and a user simply needs to be able to see which record describes which thingy. I need to uniquely identify them too, hence an additional surrogate-key. This can be an auto-increment, a GUID, or a varchar. I don't care, the surrogate doesn't hold information, it holds a pointer. What I do care about is that I too have a unique field to work with in code. I never need to print it's ID on screen, as the user will never, ever, ever use it to identify a record. Still, it pays to have a simple one-field alternate key, as it keeps our source-code clean.

        Stewart Judson wrote:

        I can see advantages & disadvantages in auto-increment as PK & unique identifying info as PK, but neither really 'wins' consistently.

        Any arguments against using them both?

        Bastard Programmer from Hell :suss: If you can't read my code, try converting it here[^] They hate us for our freedom![^]

        W 1 Reply Last reply
        0
        • P PIEBALDconsult

          Jörgen Andersson wrote:

          elaborate

          For example a table with two references to a User table, like Sender and Recipient -- in neither case is UserID an appropriate name for the field.

          J Offline
          J Offline
          Jorgen Andersson
          wrote on last edited by
          #77

          I get your point. I could of course argue that it wouldn't be fully normalized. But that would be just silly in this case. That an entity should have the same name everywhere is a good rule to follow, but not at any cost. But also in this case I fail to see how calling the field just ID makes it any better. In my old job I had a customer whose database had more than ten thousand tables. They also had too many consultants. After bugfixing some of the queries they had, I got quite convinced that the naming needs to be as consistent as possible.

          People say nothing is impossible, but I do nothing every day.

          P 1 Reply Last reply
          0
          • G Gary Huck

            With regard to database design: Is it just me or are there others out there who are driven nuts by repeating the table name in the column name. E.g., I see things like Widget_Attribute_Type.Widget_Attribute_Type_Id all the time when all that is needed is Widget_Attribute_Type.Id. Seems when I debate this with the DBA types and architects they use the same [similar] tired arguments.

            U Offline
            U Offline
            User 7638743
            wrote on last edited by
            #78

            http://www.tonymarston.net/php-mysql/database-design-ru-novice-ninja-or-nincompoop.html I read this article a while back and agree with some (but not all) that it states. IMO, he does a pretty good job of defending why you would use table_id instead of simply "id" for your technical key name.

            1 Reply Last reply
            0
            • J Jorgen Andersson

              I get your point. I could of course argue that it wouldn't be fully normalized. But that would be just silly in this case. That an entity should have the same name everywhere is a good rule to follow, but not at any cost. But also in this case I fail to see how calling the field just ID makes it any better. In my old job I had a customer whose database had more than ten thousand tables. They also had too many consultants. After bugfixing some of the queries they had, I got quite convinced that the naming needs to be as consistent as possible.

              People say nothing is impossible, but I do nothing every day.

              P Offline
              P Offline
              PIEBALDconsult
              wrote on last edited by
              #79

              Jörgen Andersson wrote:

              an entity should have the same name everywhere is a good rule to follow, but not at any cost

              Correct. The name should give some context not just datatype information; e.g. why is the particular User associated with the current record? What part does he play in this little drama?

              J 1 Reply Last reply
              0
              • L Lost User

                Stewart Judson wrote:

                Do you mind me asking why?

                Of course not, been planning an article on the subject for some time. Short answer; if an identity would suffice, then the database-software would have abstracted it away, adding it automagic to each table-definition. Ages ago, we had non-normalized lists on our computers. Very soon we noticed things like double (or triple) entries, describing the same entity. You've probably seen a database where a customer was entered twice. Normalization (among other things) state that any record in the table should have a key to uniquely identify it. Follow the normalization-rules, and you end up with some tables having a very large compound key. Still, I consider that my primary key, that's the collection of fields that I can tell the end-user to look at to differentiate between the records he sees. Each record describes a "thing" in the real world. A table is a collection of those thingies, and a user simply needs to be able to see which record describes which thingy. I need to uniquely identify them too, hence an additional surrogate-key. This can be an auto-increment, a GUID, or a varchar. I don't care, the surrogate doesn't hold information, it holds a pointer. What I do care about is that I too have a unique field to work with in code. I never need to print it's ID on screen, as the user will never, ever, ever use it to identify a record. Still, it pays to have a simple one-field alternate key, as it keeps our source-code clean.

                Stewart Judson wrote:

                I can see advantages & disadvantages in auto-increment as PK & unique identifying info as PK, but neither really 'wins' consistently.

                Any arguments against using them both?

                Bastard Programmer from Hell :suss: If you can't read my code, try converting it here[^] They hate us for our freedom![^]

                W Offline
                W Offline
                Worried Brown Eyes
                wrote on last edited by
                #80

                Cheers Eddy It's the trade-off between the long compound key and the simplicity of the id (but then, as you have said, it can be uniquely indexed against the id without being the primary key). A proper compound key does avoid the problem of duplicates amongst things that should be unique (I think this will get more weight in my mind in future) Which leaves me with only look-ups that are basically a description, but you don't want to have the description as the foreign-key, or you are saving no storage space, so you put an Id column on there to use as foreign key. Now, the above argument about uniqueness for the description can be used. I think you have convinced me - just need to stop thinking 'We need a thing, better have a thing table; first field thing.id, a primary key! (not thing.thingid, but this is where we started ;) ) Regards, Stewart

                L 1 Reply Last reply
                0
                • P Paulo Zemek

                  I must say that I hate that too. And it is even worse when the fields get too long and so they start to abbreviate parts of the name (be it of the table name or the column name)... it makes it impossible to create C# code that automatically generates queries without using alternative methods to say: Hey... Id becomes "SOME_ABBV_TB_ID".

                  C Offline
                  C Offline
                  CHill60
                  wrote on last edited by
                  #81

                  I can think of something worse ... I'm having to deal with a database (designed by someone else I hasten to add) where table names and column names have spaces in them e.g. [Current Sterling Rate]. :( Drives me nuts. But on a positive side - at least I don't have to hit the Shift key again to get the []

                  1 Reply Last reply
                  0
                  • W Worried Brown Eyes

                    Cheers Eddy It's the trade-off between the long compound key and the simplicity of the id (but then, as you have said, it can be uniquely indexed against the id without being the primary key). A proper compound key does avoid the problem of duplicates amongst things that should be unique (I think this will get more weight in my mind in future) Which leaves me with only look-ups that are basically a description, but you don't want to have the description as the foreign-key, or you are saving no storage space, so you put an Id column on there to use as foreign key. Now, the above argument about uniqueness for the description can be used. I think you have convinced me - just need to stop thinking 'We need a thing, better have a thing table; first field thing.id, a primary key! (not thing.thingid, but this is where we started ;) ) Regards, Stewart

                    L Offline
                    L Offline
                    Lost User
                    wrote on last edited by
                    #82

                    Stewart Judson wrote:

                    Which leaves me with only look-ups that are basically a description

                    There's no sweet way of preventing duplicates there; the only alternative that has been given to me, was to replace them with a varchar-field in the table that originally referenced them. Sounded weird at first, until I saw the implementation - it did a SELECT DISTINCT on that column, showing the results in a drop-down. That's not always a usefull alternative, but it's nice to have options.

                    Stewart Judson wrote:

                    I think you have convinced me - just need to stop thinking 'We need a thing, better have a thing table; first field thing.id, a primary key! (not thing.thingid, but this is where we started ;) )

                    Start thinking "how will the user differentiate between his real-life thingies, and can we use those properties to uniquely identify a thingy-record on screen" :)

                    Bastard Programmer from Hell :suss: If you can't read my code, try converting it here[^] They hate us for our freedom![^]

                    1 Reply Last reply
                    0
                    • P PIEBALDconsult

                      Jörgen Andersson wrote:

                      an entity should have the same name everywhere is a good rule to follow, but not at any cost

                      Correct. The name should give some context not just datatype information; e.g. why is the particular User associated with the current record? What part does he play in this little drama?

                      J Offline
                      J Offline
                      Jorgen Andersson
                      wrote on last edited by
                      #83

                      I just remembered, if your database is ISO SQL-92 compliant there is yet another point in using the same name of your ID fields. Check this out:

                      SELECT *
                      FROM CUSTOMERS
                      JOIN ORDERS
                      USING CustomerID

                      This doesn't work on SQL Server or Sybase.

                      "The ones who care enough to do it right care too much to compromise." Matthew Faithfull

                      P 1 Reply Last reply
                      0
                      • J Jorgen Andersson

                        I just remembered, if your database is ISO SQL-92 compliant there is yet another point in using the same name of your ID fields. Check this out:

                        SELECT *
                        FROM CUSTOMERS
                        JOIN ORDERS
                        USING CustomerID

                        This doesn't work on SQL Server or Sybase.

                        "The ones who care enough to do it right care too much to compromise." Matthew Faithfull

                        P Offline
                        P Offline
                        PIEBALDconsult
                        wrote on last edited by
                        #84

                        As well it shouldn't.

                        1 Reply Last reply
                        0
                        Reply
                        • Reply as topic
                        Log in to reply
                        • Oldest to Newest
                        • Newest to Oldest
                        • Most Votes


                        • Login

                        • Don't have an account? Register

                        • Login or register to search.
                        • First post
                          Last post
                        0
                        • Categories
                        • Recent
                        • Tags
                        • Popular
                        • World
                        • Users
                        • Groups