From: Peter Rabbitson Date: Sat, 30 Jan 2010 12:11:18 +0000 (+0000) Subject: Draft PK explanation X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=commitdiff_plain;h=ef8f6e190c35e6a87fb03ada9929ebb33474865c;p=dbsrgits%2FDBIx-Class-Historic.git Draft PK explanation --- diff --git a/lib/DBIx/Class/Manual/Intro.pod b/lib/DBIx/Class/Manual/Intro.pod index 4625d06..5d7c48b 100644 --- a/lib/DBIx/Class/Manual/Intro.pod +++ b/lib/DBIx/Class/Manual/Intro.pod @@ -397,6 +397,40 @@ L. =head1 NOTES +=head2 The Significance and Importance of Primary Keys + +The concept of a L in +DBIx::Class warrants special discussion. The formal definition (which somewhat +resembles that of a classic RDBMS) is I. However this is where the +similarity ends. While in a RDBMS you can safely change any column within a +row, you can not do the same in DBIC because B object and a specific row in your +database>. Any time you call a CRUD operation on a row (e.g. +L, +L, +L, +etc.) DBIx::Class will use the B of the +L columns to populate +the C clause necessary to accomplish the operation. + +This is why it is important to declare a +L on all your result +sources B. In a pinch one can +always declare each row identifiable by all its columns: + + __PACKAGE__->set_primary_keys (__PACKAGE__->columns); + +If you elect not to declare a C, DBIx::Class will behave correctly +by throwing exceptions on any row operation that relies on unique identifiable +rows. If you inherited datasets with multiple identical rows in them, you can +still operate with such sets provided you only utilize +L CRUD methods: +L, +L, +L + + =head2 Problems on RHEL5/CentOS5 There used to be an issue with the system perl on Red Hat Enterprise