Newsgroup: it.comp.lang.delphi
Titolo: Scelta chiave

Ho due tabelle che debbo porre in relazione uno a molti.
Non ho nessun campo tipo codice fiscale o altro che si possa prestare come 
chiave, cosa si fa' in questo caso?
Si puo' usare bene un campo incrementale Integer? sto usando gli IBX
Giorgio 

 Si puo' usare bene un campo incrementale Integer? sto usando gli IBX
Sì, ma se stai usando Firebird, anziché Interbase, usa gli UIB, anziché
gli IBX.  I campi autoincrementanti, con IB/FB si definiscono come campi
interi normali e l'autoincremento si ottiene mediante trigger di before
insert che invoce un generatore.
-- 
questo articolo e` stato inviato via web dal servizio gratuito 
http://www.newsland.it/news
 segnala gli abusi ad 
ab...@newsland.it

 sto usando gli IBX
non ha alcuna importanza ai fini del problema che hai posto.
A.


volte.io
, ove possibile, non suo gli autoinc.
Perché ? I campi autoincrementanti sono supportati da tutti i DB
(Access e MySQL, in cui sono automatici, Interbase/Firebird, in cui si
attivano mediante trigger+generatori, Oracle e PostgreSQL, in cui
esistono le sequence) e sono generalmente comodissimi, funzionando al
di fuori del contesto delle singole transazioni.
Le chiavi primarie delle mie tabelle sono *sempre* campi
autoincrementanti, quando essi fungono da chiave che può essere
autoincrementata senza problemi.  In tabelle, invece, destinate a
contenere stati o tipi, non lo sono (ovviamente).

 di fuori del contesto delle singole transazioni.
vero. ma se stai inserendo dati in una relazione master-detail, 
tipicamente una fattura, l'uso degli auotinc ti obbliga a salvare il 
record master per avere disponibile l'id del record padre da passare ali 
figli, ovvero interrogare il db per conoscere l'ultimo autoinc calcolato 
nella sessione dell'utente, usando ad esempio la sintassi select 
@@identity di SqlServer.
Magari conosci anche tu i furbi che si limitano a usare una select max 
su tale campo, dimenticando che se si è in un contesto multiutente non è 
detto che il max sia l'ultimo calcolato in una specifica sessione.
Ovviamente, se 6 in un ambito in cui di questi casini non te ne frega, 
usi gli autoinc e buonanotte.
A.

 Ovviamente, se 6 in un ambito in cui di questi casini non te ne frega, 
Quali casini ? io ho lavorato negli ambiti piů disparati, con grandi
casini e piccoli casini, ma di casini derivanti dagli autoinc non ne ho
incontrato neanche uno.


 incontrato neanche uno.
ok, mi correggo:
1) in un contesto db-aware preferisco non usarli, usando stored
procedure dedicate che richiamano sequences/generators, richiamando
tali procedure sulla OnNewRecord.
2) in un contesto mda non so... sto iniziando solo adesso a usare
questo tipo di architettura. 
A.

 tali procedure sulla OnNewRecord.
Mamma mia che confusione: che c'entrano i db-aware ? in generale, poi,
*NON* si usano stored procedure per generare i nuovi identificatori.



OK ho usato un generatore come dici.
Per quanto riguarda i componenti ho optato per gli IBX dal momento che 
posseggo diversa documentazione dai testi del D4.
Gli esempi presenti nel pack degli UIB sono piuttosto scarni ed in piu' per 
me l'sql e' un nuovo linguaggio.
Ciao Giorgio