Indice

FAQ su OOoBase


FAQ generali

Introduzione

Queste FAQ non vogliono essere un documento che permetta di imparare l'uso di un database, al più possono offrire degli spunti per capire meglio alcuni concetti.
Qui viene riportato in maniera "semplicistica" la spiegazione di alcuni argomenti; per sapere tutti i dettagli occorre consultare un manuale sull'argomento.

Torna su

Consigli

Se davvero si vuole imparare ad utilizzare un database occorre:

  1. leggersi un libro o un manuale che spiega in dettaglio ogni argomento
  2. fare molti esercizi
  3. evitare l'uso di strumenti visuali, cercando di imparare la sintassi dei vari comandi. Questo permette di capire veramente cosa si sta facendo

Devono essere ben chiari almeno i seguenti concetti:

  1. tabella: creazione, cancellazione, …
  2. chiave primaria (primary key): creazione, cancellazione, …
  3. chiave esterna (foreign key): creazione, cancellazione, …
  4. indice: creazione, cancellazione, …
  5. query: occorre imparare molto bene almeno le parti principali che compongono una query:
    1. clausola select
    2. clausola from
    3. clausola where
    4. clausola insert
    5. clausola delete
    6. clausola update
    7. clausola drop
  6. query 2: poi bisognerebbe conoscere bene anche:
    1. clausola order by
    2. clausola group by
    3. clausola having
    4. sotto-select nella clausola where
    5. sotto-select nella clausola from

Per poter affermare di essere in grado di creare e utilizzare un database occorrono mesi di studio ed esercizi. Non bisogna lasciarsi ingannare dalla finta-semplicità che offrono strumenti visuali come OOoBase.

Un ottimo database utilizzabile liberamente è PostgreSQL (http://www.postgresql.org). Per tale database sul sito è disponibile una buona documentazione.

Torna su


FAQ su tabelle

Come si crea una tabella?

Il comando per creare una tabella:

create table NOME_TABELLA
(
CAMPO1 TIPO_CAMPO1 [not null],
CAMPO2 TIPO_CAMPO2 [not null],
...
CAMPON TIPO_CAMPON [not null]
)

Nota: le scritte in maiuscolo vanno sostituite con qualcosa di appropriato
Nota: le scritte tra parentesi quadre non sono obbligatorie

es:

create table anagrafica
(
codice_fiscale varchar(16) not null,
nome varchar(50) not null,
cognome varchar(50) not null
)

Torna su

Cos'è una chiave primaria (primary key)?

Una chiave primaria o in inglese primary key è il campo o l'insieme di campi che permettono di identificare in modo univoco e accedere in modo diretto ad un determinato record.

Torna su

A cosa serve una chiave primaria?

Una chiave primaria o in inglese primary key identifica il campo o insieme di campi che garantiscono:

Possiamo vedere la chiave primaria come le serrature delle porte di un albergo: non è possibile trovare due camere che si possono aprire con la stessa chiave e ogni chiave permette di aprire solo la serratura ad essa associata.

L'accesso ai dati è "veloce" grazie ad un indice creato in automatico alla creazione della chiave primaria.
L'univocità è garantita dall'indice associato alla chiave perché è creato con l'opzione "unique".

Torna su

Quando bisogna usare una chiave primaria?

Una chiave primaria va utilizzata quasi sempre.
Nella quasi totalità dei casi è possibile creare una chiave primaria utilizzando uno o più campi già presenti; mentre è sempre possibile inserire un nuovo campo univoco da utilizzare come chiave primaria.

Ci possono essere dei casi dove la chiave primaria non è necessaria, ma quando si è agli esordi è bene creare sempre una chiave primaria per ogni tabella.

Torna su

Come si crea una chiave primaria?

Prima di tutto bisogna dire che è possibile creare la chiave primaria usando:

  1. campi già esistenti nella tabella
  2. un nuovo campo che conterrà numeri incrementati automaticamente ad ogni record (in realtà l'incremento può non essere automatico o così automatico, dipendo dal database che si utilizza)

Ci sono scuole di pensiero che optano per creare chiavi primarie di tipo 1, altri di tipo 2 e altri usare un po' le une e un po' le altre.
Personalmente preferisco utilizzare sempre campi già esistenti e usare un nuovo campo numerico solo nei casi in cui non si può garantire l'unicità di un insieme di campi o se il numero di tali campi è troppo elevato.

Riprendendo l'esempio presente nella FAQ "Come si crea una tabella?" si può facilmente capire quale campo può essere utilizzato come chiave primaria:

Quindi la scelta è fatta: la nostra chiave sarà il "codice fiscale"!

Vediamo prima di tutto la sintassi per creare una chiave primaria:

alter table NOME_TABELLA
add constraint NOME_CHIAVE primary key( CAMPO1 [, CAMPO2 [...]] )

Vediamo un esempio:

alter table anagrafica
add constraint pk_anagrafica primary key( codice_fiscale )

Nota: è consigliabile crearsi una convenzione per assegnare nomi ai vari elementi; per esempio identificare le chiavi primarie con il prefisso "pk_" (primary key) e poi il nome della tabella. Questo faciliterà di molto la comprensione e l'utilizzo di un database, soprattutto se ha un grosso numero di tabelle.

Torna su

Cos'è un indice?

Un indice è un metodo per permettere un accesso "veloce" alla tabella usando determinate colonne di essa.

Torna su

A cosa serve un indice?

Lo scopo di un indice è quello di rendere immediato o quasi l'accesso ai record di una tabella fornendo i contenuti di determinate colonne.
Se l'indice è univoco, allora permette anche di avere la certezza che non vi siano più record con le stesse colonne dell'indice.

Alla creazione di una chiave primaria viene creato in automatico un indice univoco.

Torna su

Quando bisogna usare un indice?

L'indice deve essere creato in base a quali dati si dispone per interrogare la tabella.
Se non si ha un indice sulle colonne utilizzate durante l'interrogazione o su un sottoinsieme di esse, allora può risultare molto lenta l'esecuzione della query.

Quindi gli indici vanno creati a seconda di come poi verrà "interrogata" la tabella.

Bisogna tenere conto che creare indici su una tabella ha dei costi, che in alcuni casi possono essere elevati e arrivare a determinare situazioni di rallentamento sulla tabella. Per questo motivo è bene creare solo gli indici necessari all'uso che si deve fare della tabella.

Non tutti i campi di una tabella possono essere utilizzati in modo proficuo per ottenere un buon indice. I fattori che determinano la bontà o meno di un insieme di campi come candidati di un possibile indice sono molti e dipendono da: dimensioni tabella, ripetizione di valori dei campi.

Per esempio indici, oltre la chiave primaria, su tabelle piccole (con pochi record) sono da evitare; questo perché se la tabella è piccola, allora il costo d'uso dell'indice può essere superiore al costo di accesso diretto e su tutti i record della stessa.
Quindi gli indici vanno creati su tabelle grosse (stabilire se una tabella è piccola o se è grossa dipende da vari fattori).

Se un campo contiene pochi valori o per la maggior parte contiene sempre lo stesso valore, allora, nella maggior parte dei casi, è meglio evitare di creare un indice su di esso.

Un indice velocizza le query di selezione su di esso, ma rallenta le query di insert e update (queste ultime se si modifica un valore dell'indice).

Infine un indice univoco è indispensabile per poter creare una foreign key (chiave esterna) su un'altra tabella.

È bene leggersi un buon manuale sull'argomento e meglio ancora fare esperienza facendo molti esercizi. Alle volte per imparare effettivamente l'uso di alcune parti è necessario applicare le proprie conoscenze su un ambiente lavorativo.

Torna su

Come si crea un indice?

Bisogna:

  1. prima di tutto individuare le colonne da utilizzare
  2. poi individuare l'ordine migliore: mettere prima le colonne che di cui si conoscerà sicuramente il contenuto e per ultime quelle per cui potrebbero non essere conosciuti i valori

La sintassi per creare un indice è la seguente:

create [unique] index NOME_INDICE on NOME_TABELLA( COLONNA1 [, COLONNA2 [...]] );

Riprendendo l'esempio già visto in queste FAQ:

create index ndx_anagrafica on anagrafica( cognome, nome );

Notare che è stato messo prima la colonna "cognome" dando per scontato che di tale colonna si conoscerà sempre il contenuto quando si usa questo indice.

Torna su

Che differenza c'è tra un indice ed una chiave primaria?

Una chiave primaria è un indice univoco o meglio è l'indice univoco principale della tabella; è l'indice che contiene i campi che sono normalmente utilizzati per accedere ad essa tramite query di select o per fare join.

Torna su

Cos'è una chiave esterna (foreign key)?

Una foreign key è un metodo per assicurarsi che in una tabella vengano utilizzati solo i campi presenti in un indice univoco (o chiave primaria) di un'altra tabella.

Torna su

A cosa serve una foreign key?

Una foreign key serve per:

Torna su

Quando bisogna usare una foreign key?

Una foreign key va utilizzata sempre dove possibile perché permette di mantenere il proprio databse consistente.

Torna su

Come si crea una foreign key?

Per creare una foreign key usare la seguente sintassi

alter table NOME_TABELLA
add constraint NOME_FK foreign key( CAMPO1 [, CAMPO2 [...]] )
references TABELLA_NDX( CAMPO1 [, CAMPO2 [...]] )

es: bisogna prima creare una tabella per poterla usare con la tabella anagrafica

create table utente
(
codice_fiscale_utente varchar( 16 ),
programma_usato varchar( 50 )
)
alter table utente
add constraint fk_utente_anagrafica foreign key( codice_fiscale_utente )
references anagrafica( codice_fiscale )

Torna su


FAQ esempi su OOoBase

Uso form e sottoform per visualizzare e aggiornare tabella con fk

È stato creato un esempio che permette di vedere come visualizzare e modificare i campi di:

L'esempio è basato su due tabelle, una foreign key tra di esse e un form.

Link download Dimensione in byte
EsempioFK 17.574

Le tabelle dell'esempio sono:

id_a des_a
0 test
1 uno
2 due
3 tre
4 quattro
id_b id_a des_b
0 1 des_b_1
1 4 des_b_2
2 1 des_b_3
3 2 des_b_4
6 0 des_b_6

Tra la tabella "b" e la tabella "a" è stata creata una foreign key impostando che:

Torna su


FAQ su OOoBase e PostgreSQL

Come si crea un collegamento ODBC a PostgreSQL in Debian?

Seguire i seguenti passi:

# apt-get install odbc-postgresql
# odbcinst -i -d -f /usr/share/psqlodbc/odbcinst.ini.template
# cat /usr/share/doc/odbc-postgresql/examples/odbc.ini.template >> /etc/odbc.ini
Database = mio_db
Servername = 127.0.0.1

Nota: al posto di 127.0.0.1 si può usare il nomehost.nomedomain definiti (il nomedomain potrebbe non essere definito e quindi in questo caso non va indicato, mentre il nomehost di solito è localhost).

ReadOnly = No

Per ulteriori informazioni vedere:

$ man odbcinst

Ora base dovrebbe essere connesso al tuo database.

Torna su

Come si può creare un collegamento a PostgreSQL?

Vedere la pagina dedicata a PostgreSQL su OOo.

Torna su


Navigazione rapida: Home - Dizionari - Thesaurus - Estensioni - News - FAQ - Mappa - Software
GPL3 License AGPL3 License
SourceForge.net Logo