7  package Music::Artist;
 8  use base 'Music::DBI';
 9  Music::Artist->table('artist');
10  Music::Artist->columns(All => qw/artistid name/);
11  Music::Artist->has_many(cds => 'Music::CD');
12
13  package Music::CD;
14  use base 'Music::DBI';
15  Music::CD->table('cd');
16  Music::CD->columns(All => qw/cdid artist title/);
17  Music::CD->has_many(tracks => 'Music::Track');
18  Music::CD->has_a(artist => 'Music::Artist');
19
20  package Music::Track;
21  use base 'Music::DBI';
22  Music::Track->table('track');
23  Music::Track->columns(All => qw/trackid cd title/);
24
25  my $artist = Music::Artist->insert({ name => 'U2' });
26
27  my $cd = $artist->add_to_cds({
28    title  => 'October',
29  });
30
31  $cd->update;
Ejecución:
lhp@nereida:~/Lperl/src/CLASS_DBI$ perl synopsis1.pl lhp@nereida:~/Lperl/src/CLASS_DBI$ sqlite3 example.db SQLite version 3.3.8 Enter ".help" for instructions sqlite> .dump BEGIN TRANSACTION; CREATE TABLE artist ( artistid INTEGER PRIMARY KEY, name TEXT NOT NULL ); INSERT INTO "artist" VALUES(1, 'Michael Jackson'); INSERT INTO "artist" VALUES(2, 'Eminem'); INSERT INTO "artist" VALUES(3, 'U2'); CREATE TABLE cd ( cdid INTEGER PRIMARY KEY, artist INTEGER NOT NULL REFERENCES artist(artistid), title TEXT NOT NULL ); INSERT INTO "cd" VALUES(1, 1, 'Thriller'); INSERT INTO "cd" VALUES(2, 1, 'Bad'); INSERT INTO "cd" VALUES(3, 2, 'The Marshall Mathers LP'); INSERT INTO "cd" VALUES(4, 3, 'October'); CREATE TABLE track ( trackid INTEGER PRIMARY KEY, cd INTEGER NOT NULL REFERENCES cd(cdid), title TEXT NOT NULL ); INSERT INTO "track" VALUES(1, 3, 'The Way I Am'); INSERT INTO "track" VALUES(2, 3, 'Stan'); INSERT INTO "track" VALUES(3, 1, 'Billie Jean'); INSERT INTO "track" VALUES(4, 2, 'Leave Me Alone'); INSERT INTO "track" VALUES(5, 2, 'Smooth Criminal'); INSERT INTO "track" VALUES(6, 1, 'Beat It'); INSERT INTO "track" VALUES(7, 2, 'Dirty Diana'); COMMIT; sqlite>
lhp@nereida:~/Lperl/src/CLASS_DBI$ cat -n synopsis2.pl
 1  #!/usr/local/bin/perl -w
..  .............................. # like in the former example
25
26  my $cd = Music::Artist->search_like(name => 'Eminem')->first;
27
28  print $cd->artistid,": ",$cd->name,"\n";
29
30  my $first = Music::Artist->retrieve(1);
31  print $first->name,"\n";
32
33  print "CDs\n";
34  for my $cd (Music::CD->retrieve_all) {
35    print "\t",$cd->title,"\n";
36  }
lhp@nereida:~/Lperl/src/CLASS_DBI$ perl synopsis2.pl
2: Eminem
Michael Jackson
CDs
        Thriller
        Bad
        The Marshall Mathers LP
Casiano Rodríguez León
