>Ho la necessita che, nell'inserire un libro nel database, venga
>creato un codice identificativo del libro dato dal numero id
>della tabella genere seguito dal numero id della tabella libro.
>Faccio un esempio:
>Inserisco il libro col titolo "mio libro" (che avrà l'id 12)
>assegnandogli dalla tabella genere "Fantastico" (che avrà id
>3).
>L'ultimo campo della tabella libro deve essere generato automaticamente
>come 030012 (dove 03 è l'id del genere e 0012 è l'id del libro
>in migliaia).
Ciao Carlo,
Per quale motivo hai una esigenza così singolare utilizzata in passato su sistemi "poco evoluti"?
Microsoft Access è un database relazionale (RDBMS), quindi implementa nativamente la logica relazionale definita dal Dott. Edgar Frank Codd nel lontano 1970:
http://en.wikipedia.org/wiki/Edgar_F._Codd
In base a tale logica è possibile "mettere in relazione" due tabelle tra di loro.
Vediamo un esempio concreto.
Supponiamo che ogni libro appartenga ad 1 solo genere.
L'entità libro e l'entità genere possono essere "tradotte" in due tabelle: Libri e Generi.
Dato che ad 1 libro corrisponde 1 solo genere, ma 1 genere può essere attribuito a più libri possiamo dire che le tabelle Generi e Libri sono in relazione 1 a molti.
Ormai al giorno d'oggi ogni libro è accompagnato da un codice ISBN (International Standard Book Number) che lo identifica univocamente nel mondo:
http://it.wikipedia.org/wiki/Codice_ISBN
Quindi potremmo utilizzare tale codice per identificare univocamente ogni libro nella tabella Libri. Su questa colonna andremo a definire un vincolo di Chiave Primaria (Primary Key Constraint).
Dato che non mi viene in mente una "chiave naturale" (Natural Key) per identificare univocamente un genere, potremmo affidarci ad una colonna autoincrementante, definendo su di essa una Primary Key.
Proviamo a disegnare una bozza di diagramma:
+-------------+ +------------+
| Generi | | Libri |
+-------------+ 1 +------------+
PK | GenereID |---+ | ISBN | PK
| Descrizione | +--> | GenereID | FK
+-------------+ molti| Titolo |
| Editore |
+------------+
Sulla colonna GenereID della tabella Libri ho definito un vincolo di Chiave Esterna (Foreign Key Constraint) che vincola tale colonna ad assumere solo ed esclusivamente i valori relativi alla corrispondente colonna della tabella Generi.
In questo modo non posso inserire o aggiornare un libro con un genere che non sia già stato precedentemente inserito nella tabella Generi.
OK, va bene, ma come si fa a realizzare tutto questo con Microsoft Access?
Guarda, è molto più difficile spiegarlo che farlo, pertanto sarò telegrafico.
Prima di tutto definisci le due tabelle (e qua sono sicuro che sarai più bravo di me nel farlo ).
Definisci le due chiavi primarie (seleziona le colonne GenereID e premi il bottoncino con la chiavetta).
Definisci il constraint Foreign Key (Seleziona Database Tools -> Relationship, aggiungi le due tabelle ed esegui il Drag & Drop della colonna GenereID della tabella Generi sulla colonna GenereID della tabella Libri e seleziona la check box Enforce Referential Integrity).
Fatto
Ti allego un esempio realizzato in Access 2007.
Ciao!
--
Lorenzo Benaglia
Microsoft MVP - SQL Server
http://blogs.dotnethell.it/lorenzo/
http://italy.mvps.org