"Agile Database Techniques" by Scott Ambler (well regarded DB guru) has an
excellent discussion on the key picking strategy. The short version is that
surrogate keys is most often the right strategy however there are certain
types of data that are commonly accessed by unique identifiers where use of
natural keys may be more appropriate. The User, Role tables seem to fall
under this category - unless changing usernames was a supported use case for
the application
Here is an article by him where he discusses this :
http://java.sys-con.com/node/36660

Sanjiv

On Tue, Dec 16, 2008 at 9:51 AM, Ice-Man <[email protected]> wrote:

>    In the example, I mean the year of entering (starting year) College
> (instead of degree). (yeah, my english was not so good this time! :o)
>    So, in the case u exposed, there is a performance Restriction/Requisite.
> (That would be a reason to change Identifying approach.)
>
> Ice-Man
>
>
> 2008/12/15 Nathan Anderson <[email protected]>
>
>> Iceman,
>>
>> In a perfect wolrd there would never be a need to create an artificial
>> primary key. However once people start using the applications things
>> tend to get messier.
>>
>> Using your example, what happens when the student changes majors or
>> enters a post graduate degree and his ID changes to refelct the
>> deparetment change. If you have foreign key references on that logical
>> primary key you have a problem. Even if the business logic states the
>> ID should never change, people make mistakes so you still need to be
>> able to change that field.
>>
>> There can also be a matter of performace. There is no faster index
>> than an integer. So forcing your database to use a logical primary key
>> (or composite key) can hinder database performance depending on your
>> situation.
>>
>> Nathan
>>
>>
>> On 12/15/08, Ice-Man <[email protected]> wrote:
>> >    I strongly DESAGREE u. Acording Data Modeling (entity-relation
>> modeling)
>> > there isn't any reason to create an ARTIFICAL IDENTIFIER ATTRIBUTE, if
>> there
>> > is a REAL data that can be used as the identifier.
>> >    Otherwise u may designate a artifical identifier. Pupils from
>> Colleges
>> > Applicants use to be an anagrama of letters and numbers (so that make up
>> > ID). I think u guess what I mean.
>> >
>> >       Gupta,
>> >
>> >   But, I think it's almost impossible to set Hibernate to generate such
>> ID
>> > in automatic fashion. It's better to generate that ID by your
>> application
>> > and set Hibernate so that. I think that's the simplest way.
>> >    Hope helping,
>> >
>> > Ice-Man
>> >
>> > 2008/12/15 Nathan Anderson <[email protected]>
>> >
>> >> Just like Oscar stated, it is generally considered a best practice to
>> have
>> >> database primary keys that have no business meaning attached to them.
>>  The
>> >> example you provide appears as though it probably should be defined as
>> a
>> >> unique not null column, but not primary key.  But even if you change
>> the
>> >> data structure that doesn't solve the problem of auto assigning the
>> "next"
>> >> value to a new record.
>> >>
>> >> The method I have used in the past for situations like this to have a
>> >> table
>> >> in the database that holds the "next" value.  Then update the value
>> >> database
>> >> either in a transaction from your application, or in a stored procedure
>> >> used
>> >> to save a new record, or with a trigger on the insert statement.
>> >>
>> >> Hope that helps,
>> >> Nathan
>> >>
>> >>
>> >>
>> >> On Sun, Dec 14, 2008 at 8:51 PM, sudhakargupta <
>> >> [email protected]> wrote:
>> >>
>> >>>
>> >>> Thanks for your reply and i need an id likes the 05-CS-123 so, i need
>> an
>> >>> auto
>> >>> generated string to increment the last number, if the client want to
>> use
>> >>> the
>> >>> assigned then how to mention in model class to assign the @Id value.
>> >>>
>> >>>
>> >>> Sudhakar
>> >>>
>> >>>
>> >>> Oscar Alvarez-2 wrote:
>> >>> >
>> >>> > Hello,
>> >>> >
>> >>> > What's the diference between autogenerated Long key and
>> autogenerated
>> >>> > String
>> >>> > key???, i mean, if the String is autogenerated, it's not better
>> >>> > solution
>> >>> a
>> >>> > Long key?, but if the String key is meaningful for the end user,
>> then
>> >>> you
>> >>> > should define assigned strategy and assign it before save.
>> >>> >
>> >>> > Best Regards
>> >>> >
>> >>> >
>> >>> >
>> >>> > 2008/12/13 sudhakargupta <[email protected]>
>> >>> >
>> >>> >>
>> >>> >> Thanks for your reply
>> >>> >>
>> >>> >>  Is there any other way to use the auto generator for the string in
>> >>> mysql
>> >>> >> or in any other database
>> >>> >>
>> >>> >>  please suggest me for this solution..
>> >>> >>
>> >>> >>  Sudhakar..
>> >>> >>
>> >>> >>
>> >>> >>
>> >>> >> mraible wrote:
>> >>> >> >
>> >>> >> > If you're going to use Strings for the primary key, you'll have
>> to
>> >>> use
>> >>> >> > a type of generator that doesn't increment. I've never done this,
>> >>> >> > hopefully someone else on this list can help you.
>> >>> >> >
>> >>> >> > Matt
>> >>> >> >
>> >>> >> > On Fri, Dec 12, 2008 at 5:39 AM, sudhakargupta
>> >>> >> > <[email protected]> wrote:
>> >>> >> >>
>> >>> >> >> Hi Matt...
>> >>> >> >>
>> >>> >> >>
>> >>> >> >>  Presently i'm working with the appfuse2 struts.. In one of my
>> >>> >> >> table
>> >>> i
>> >>> >> >> need
>> >>> >> >> to use the String as a primarykey and use foreignkey relations
>> with
>> >>> >> this
>> >>> >> >> primarykey.
>> >>> >> >>
>> >>> >> >> i created a model class primary key setters/getters are
>> >>> >> >>
>> >>> >> >>
>> >>> >> >>  @Id
>> >>> >> >>  private String code;
>> >>> >> >>
>> >>> >> >>  private String getCode() {
>> >>> >> >>   return this.code;
>> >>> >> >>  }
>> >>> >> >>
>> >>> >> >>  private void setCode(String code) {
>> >>> >> >>   this.code = code;
>> >>> >> >>  }
>> >>> >> >>
>> >>> >> >> and after that run the command like mvn appfuse:gen and creates
>> the
>> >>> >> all
>> >>> >> >> the
>> >>> >> >> action classes and the jsp files. after that run the command
>> like
>> >>> mvn
>> >>> >> >> jetty:run, then it shows the errors to create the database and
>> to
>> >>> run
>> >>> >> the
>> >>> >> >> project..
>> >>> >> >>
>> >>> >> >>  it shows the errors like primarykey field must be the Long
>> >>> datatype..
>> >>> >> >>
>> >>> >> >>  can u please suggest me to create the database through appfuse
>> ..
>> >>> >> >>
>> >>> >> >>
>> >>> >> >> Sudhakar
>> >>> >> >>
>> >>> >> >>
>> >>> >> >>
>> >>> >> >>
>> >>> >> >> --
>> >>> >> >> View this message in context:
>> >>> >> >>
>> >>> >>
>> >>>
>> http://www.nabble.com/Appfuse2-Struts-problem-tp20974893s2369p20974893.html
>> >>> >> >> Sent from the AppFuse - User mailing list archive at Nabble.com.
>> >>> >> >>
>> >>> >> >>
>> >>> >> >>
>> >>> ---------------------------------------------------------------------
>> >>> >> >> To unsubscribe, e-mail: [email protected]
>> >>> >> >> For additional commands, e-mail:
>> [email protected]
>> >>> >> >>
>> >>> >> >>
>> >>> >> >
>> >>> >> >
>> ---------------------------------------------------------------------
>> >>> >> > To unsubscribe, e-mail: [email protected]
>> >>> >> > For additional commands, e-mail: [email protected]
>> >>> >> >
>> >>> >> >
>> >>> >> >
>> >>> >>
>> >>> >> --
>> >>> >> View this message in context:
>> >>> >>
>> >>>
>> http://www.nabble.com/Appfuse2-Struts-problem-tp20974893s2369p20988292.html
>> >>> >> Sent from the AppFuse - User mailing list archive at Nabble.com.
>> >>> >>
>> >>> >>
>> >>> >>
>> ---------------------------------------------------------------------
>> >>> >> To unsubscribe, e-mail: [email protected]
>> >>> >> For additional commands, e-mail: [email protected]
>> >>> >>
>> >>> >>
>> >>> >
>> >>> >
>> >>> > --
>> >>> > Atentamente
>> >>> > Oscar Alvarez V
>> >>> > (09) 8416 4052
>> >>> >
>> >>> >
>> >>>
>> >>> --
>> >>> View this message in context:
>> >>>
>> http://www.nabble.com/Appfuse2-Struts-problem-tp20974893s2369p21008315.html
>> >>>  Sent from the AppFuse - User mailing list archive at Nabble.com.
>> >>>
>> >>>
>> >>> ---------------------------------------------------------------------
>> >>> To unsubscribe, e-mail: [email protected]
>> >>> For additional commands, e-mail: [email protected]
>> >>>
>> >>>
>> >>
>> >
>>
>> ---------------------------------------------------------------------
>> To unsubscribe, e-mail: [email protected]
>> For additional commands, e-mail: [email protected]
>>
>>
>
>
> --
> Derlon
>
> Ao encaminhar esta mensagem (ou qualquer 1 q se destine a mim tb), não se
> esqueça de retirar o meu nome e o meu End. de E-Mail e coloque todos os
> End.s dos destinatários em Cópia Oculta - CcO (BCc). Ajude a combater o
> Spam!
>

Reply via email to