Newsgroup: it.comp.software.database
Titolo: (principiante) domanda su Openoffice.org Base

Buongiorno.
Con Openoffice.org Base (o eventualmente con Access)e' possibile creare
automaticamente una tabella per ogni record di un'altra tabella? Ad
esempio partendo dalla tabella auto, creare per ogni auto aggiunta, la
tabella manutenzioni... o devo usare una sola immensa tabella
manutenzioni, inserendo per ogni suo record il campo targa?
E' molto difficile imparare ad usare mysql per uno che conosce
rudimenti di C?
Grazie, buon proseguimento
-- 
Enos

 ha scritto

pochi giorni fa c'e' stato un thread su progettazione db e normalizzazioni. 
potresti dargli un'occhiata e ragionarci un po'.
la prima obiezione che mi verrebbe da fare a una nuova tabella manut per 
ogni record della tabella auto e':
se per caso cambi la struttura della tabella manut, la cambi in tutte le n 
tabelle manut che hai generato?
la seconda e': quante tabelle puo' contenere il db che vai a usare?
la terza: in genere, pensi che ti sarebbe semplice gestire un db con 
ennecento/ennemila tabelle?
cosi' a occhio, partendo dal thread citato, manutenzione potrebbe essere una 
tabella a se' (in cui ogni record si aggancia alla tab auto tramite idauto, 
cioe' un campo id nella tab auto: targa e' univoco, ma personalmente 
preferisco gli id solo numerici, si gestiscono meglio) o una tabella n-m 
(tipo iscritti-hobbies) se per esempio ogni auto puo' fare piu manutenzioni 
(es. tagliandi).
prova magari a vedere se con i ragionamenti di quel thread riesci a 
impostare uno schema piu' funzionale.
su base e mysql passo. su base in particolare, c'e' il ng in firma.
-- 
hth, ciao, a.
news://it-alt.comp.software.openoffice : Il newsgroup dedicato a
OpenOffice.org, la suite open source di applicazioni per ufficio. 

 potresti dargli un'occhiata e ragionarci un po'. [...]
Sei gentile, ti ringrazio della disponibilità.
Io però cerco solo un sistema per assegnare ad ogni record di una
tabella, una altra tabella... è così difficile?
Nella programmazione ad oggetti basta una istruzione, possibile che in
un programma da N Megabyte non ci sia qualcosa di simile ed immediato?
Comunque, ripeto, grazie dell'aiuto. Se non trovo a breve quel che
cerco, probabilmente intraprenderò il percorso che mi hai suggerito.
Cordiali saluti
Enos

 tabella, una altra tabella... č cosě difficile?
   la strada che vuoi seguire ti portera' a realizzare un'accrocchio
ingestibile
    fermati un attimo a pensare quali dati vuoi gestire e butta giu una
bozza di schema di tabelle

 rudimenti di C?
Imparare a disegnare DB è più problematico per un programmatore che
per uno che inizia da zero; il problema è una visione che mette al
centro il codice invece che i dati.
Assai curiosamente, ho visto programmatori assolutamente in gamba
produrre database pietosi, che girano con la scorrevolezza della
colla. La tendenza generale per costoro è ridurre al minimo il
tempo dedicato allo schema, e darci giù col codice prima possibile.

 potresti dargli un'occhiata e ragionarci un po'. [...]
Sei gentile, ti ringrazio della disponibilità.
Io però cerco solo un sistema per assegnare ad ogni record di una
tabella, una altra tabella... è così difficile?
---
no, almeno in vb e access direi sia abbastanza semplice.
solo che e' insensato.
ciao, a.

 
Nel mio caso cerco di dedicare abbastanza tempo allo schema ed alle query.
Anzi, personalmente non sono un fan delle varie soluzioni per accedere
ad "alto" livello ad un database, anche se scritte bene come SQLAlchemy
(
http://sqlalchemy.org/
).
Tanto meno mi entusiasmano le varie proposte di database object
oriented, come Axiom (
http://divmod.org/trac/wiki/DivmodAxiom
).
L'SQL *è già* ad alto livello!
Preferisco sempre scrivermi tutto a mano (anche se molti suggeriscono
che questo non è l'approccio migliore)...
Però mi sono reso conto che troppo spesso mi ritrovo ad usare degli id
univoci (che, alla fine, implemento con seriali).
Questi id sono solo di supporto (ad esempio usati come link in una
applicazione web), in realtà la chiave primaria è sempre ben individuata
(spesso non un'unica colonna però), tuttavia non sono sicuro che si
possa utilizzare un id autoincrementale che non sia una chiave primaria
sui diversi database (in particolare SQLite).
Ho appena controllato e, come volevasi dimostrare:
sqlite> create table test (
   ...> nome TEXT,
   ...> cognome TEXT,
   ...> id INTEGER AUTOINCREMENT,
   ...> PRIMARY KEY (nome, cognome)
   ...> );
SQL error: near "AUTOINCREMENT": syntax error
Non so se anche MySQL abbia questo limite.
Come procedere in questi casi?
Saluti  Manlio Perillo

 Come procedere in questi casi?
Cioé non è possibile avere un id senza dichiararlo pk?
Se è così, ci troviamo di fronte ad un caso in cui il dbms
condiziona pesantemente il design.
I compromessi esistono, ma non andrebbero incoraggiati per default.

 
Il compromesso è generare l'id a mano (ad esempio usando le chiavi
primarie, nel mio caso nome+cognome).
Ma avere un semplice id numerico a volte è comodo (credo).
Non che io abbia molta esperienza...
Saluti  Manlio Perillo

 Saluti  Manlio Perillo
ciao,
per avere un id autoincrementale basta usare una sequenza.
ciao

 E che problema ci sarebbe?
Grazie a tutti.
Proverò con una unica tabellona ed estrarrò i dati di volta in volta
con le query, o altrimenti studierò pazientemente i vostri altri
suggerimenti.
Cordiali saluti, auguri di buon proseguimento
-- 
Enos

 
Peccato che in SQLite non ci siano.
http://sqlite.org/autoinc.html
Saluti  Manlio Perillo

 freCho ha scritto:

ops..mi spiace non conosco SQLite, mi riferivo ad
un db generico.
ciao

 Cioé non è possibile avere un id senza dichiararlo pk?
Penso che Manlio intendesse un ID autogenerato. Per fare un esempio,
PostgreSQL, con il tipo di dato SERIAL, permette di associare
automaticamente una sequenza al campo, in modo di dover evitare di
inserire la sequenza a mano
Enrico

 ennecento/ennemila tabelle?
Guarda, ci bestemmio tutti i giorni con un db simile, e decisamente non
e' bello (per la cronaca, le tabelle dovrebbero essere 30.000, e alcune
di queste tabelle hanno anche piu' di 200 colonne)
Enrico