You are taking on 2 big tasks: Perl and SQL.
I think that some of the posts about SQL are a bit too "fancy" for a beginner.
I would start with an idea of "how to represent the data in a single Excel spreadsheet".

I liked NetWallah's post at Re: perl create database with folder system.
I wrote some Perl code for you below. Run it, play with it. Experimentation is definitely encouraged!

In creating the table, Animal, I let the DB assign a unique ID for each "row" (see code). This is normally a good idea- so good that you should explain why you don't want that. This idea guarantees and unique id for each row even with multiple simultaneous writers. There are some "do" statements, but the normal way using the Perl DBI is to "prepare" an SQL statement and then later execute it with some variables. There are a number of ways to get the results of "execute". I show one of those ways.

The Perl DBI comes standard in many (if not all) distributions. I don't think that you will have to install anything to run the code below. I used to use a Firefox SQLite add-on as a UI but I am hearing that this is no longer supported. Bummer.

Anyway, this code "runs":

#!/usr/bin/perl use strict; use warnings; use DBI; my $dbfile = 'TestDB.sqlite'; #whatever SQLite DB name you want # SQLite doesn't have a user name or password, but needs a # "connection" my $dbh = DBI->connect("dbi:SQLite:dbname=$dbfile","","",{RaiseError = +> 1}) or die "Couldn't connect to database: " . DBI->errstr; # I put in this DROP so that you can run this code again # and again while you play with it. $dbh->do("DROP TABLE IF EXISTS Animal"); $dbh->do("CREATE TABLE Animal ( id integer PRIMARY KEY AUTOINCREMENT, Type varchar(10), Name varchar(10) ); "); my $add_animal = $dbh->prepare ("INSERT INTO Animal (Type,Name) VALUES (?,?)"); ## Make a single "transaction" for all inserts ## This is a huge performance increase if making thousands of inserts ## A DB INSERT is "expensive" due to the booking involved ## A million inserts can be part of a single transaction $dbh->do("BEGIN"); # start a new transaction for all inserts while (defined (my $line = <DATA>)) { chomp $line; my ($type,$name) = split /\|/, $line; $add_animal->execute($type,$name); } $dbh->do("COMMIT"); #massive speed up by making one transaction!! ## An Example of Query by Type my $query_by_type = $dbh->prepare ("SELECT * FROM Animal WHERE Type IS ?"); $query_by_type->execute('lion'); my $table_ref = $query_by_type->fetchall_arrayref; foreach my $row (@$table_ref) { print "@$row\n"; } =Prints: 4 lion Simba 5 lion Elsa =cut __DATA__ cat|Felix cat|Sylvester cat|Garfield lion|Simba lion|Elsa tiger|Sher Khan dog|Rover
Update:
I didn't add any indices to the Animal table. And I don't recommend that you do that until you understand more about the performance implications. Don't worry about this with a "small DB". I consider 1,000 - 10,000 records "small". In my testing with multi-million row SQLite DB's, it is possible to "shoot yourself in the foot" by over indexing in the pursuit of higher performance. This can confuse the query engine and actually slow things down. Anyway, what column to index and when to index that column is a complicated subject that I recommend you not deal with for your first DB's.

In reply to Re: perl create database with folder system by Marshall
in thread perl create database with folder system by darkblackblue

Title:
Use:  <p> text here (a paragraph) </p>
and:  <code> code here </code>
to format your post, it's "PerlMonks-approved HTML":



  • Posts are HTML formatted. Put <p> </p> tags around your paragraphs. Put <code> </code> tags around your code and data!
  • Titles consisting of a single word are discouraged, and in most cases are disallowed outright.
  • Read Where should I post X? if you're not absolutely sure you're posting in the right place.
  • Please read these before you post! —
  • Posts may use any of the Perl Monks Approved HTML tags:
    a, abbr, b, big, blockquote, br, caption, center, col, colgroup, dd, del, details, div, dl, dt, em, font, h1, h2, h3, h4, h5, h6, hr, i, ins, li, ol, p, pre, readmore, small, span, spoiler, strike, strong, sub, summary, sup, table, tbody, td, tfoot, th, thead, tr, tt, u, ul, wbr
  • You may need to use entities for some characters, as follows. (Exception: Within code tags, you can put the characters literally.)
            For:     Use:
    & &amp;
    < &lt;
    > &gt;
    [ &#91;
    ] &#93;
  • Link using PerlMonks shortcuts! What shortcuts can I use for linking?
  • See Writeup Formatting Tips and other pages linked from there for more info.