Newsgroup: it.comp.appl.access
Titolo: Domanda difficile x me, facile per voi

Scusate per la provocazione ma sono alle prime armi con Access.
Ho una tabella "Utenti" con i seguenti campi:  nome, cognome data
nascita..., ora, dovendo definire la chiave primaria, ho 2 possibili scelte:
1. definisco chiave primaria l'insieme dei campi: nome,cognome,data di
nascita
2. aggiungo un'altro campo ID_utente di tipo contatore
Io preferisco la prima  soluzione, perchè, se in fase di inserimento
introduco inavvertitamente un record con i 3 campi di cui sopra identici a
quelli di un'altro record precedentemente inserito, Access mi impedisce di
eseguire l'operazione in quanto, per definizione, non ci possono essere
duplicati per la chiave.
Utilizzando invece il campo ID_utente ( soluzione 2)  questa anomalia non
verrebbe segnalata in quanto il controllo sui duplicati non viene ora +
fatto sui 3 campi di cui sopra ma solo per ID_utente. La conseguenza di ciò
è quella di avere  due record con i 3 campi uguali. Per quello che so io
questa si chiama ridondanza ed'è una cosa assolutamente da evitare nella
progettazione dei DB.
Il dubbio sulla bontà della mia soluzione mi è venuto quando ho visto che la
soluzione universalmente adottata da voi + esperti è la seconda.
Vi chiedo come mai?

 ha scritto nel messaggio
news:9cm1d3$8a9$1...@pegasus.tiscalinet.it...


 wrote in message
news:USwH6.13814$0t6.5...@news.infostrada.it...


 ha scritto nel messaggio
news:9cm1d3$8a9$1...@pegasus.tiscalinet.it...

Nulla ti vieta di avere come chiave primaria (se lo ritieni opportuno) un
campo contatore ID_utente e contemporaneamente chiedere ad Access che ti
avverta nel caso in cui l'operatore tenti di inserire un nuovo record che
abbia nome, cognome e data di nascita uguali a quelli di un record già
presente in tabella, insomma alla stessa maniera che farebbe nel caso in cui
i tre campi li avessi dichiarati come chiave primaria.
Per far questo apri la struttura della tua tabella; dalla barra dei comandi
pigia l'icona Indici; nella finestra che ti compare, nella colonna Nome
indice di una riga vuota scrivi un nome a tuo piacimento; nella colonna Nome
Campo della stessa riga seleziona il nome del campo relativo al nome
dell'utente; imposta a Si la Proprietà indice chiamata Univoco (parte in
basso a sinistra della finestra); nella riga successiva lascia in bianco la
colonna Nome indice e nella colonna Nome campo seleziona il nome del campo
relativo al cognome; nella riga ancora successiva seleziona nella colonna
Nome campo il nome del campo relativo alla data di nascita.
Chiudi la finestra di dialogo; chiudi la struttura tabella e salvala.
Così facendo avrai ID_utente come chiave primaria e se tenterai di inserire
un nuovo record con nome, cognome e data di nascita uguali a quelli di un
altro record, Access ti segnalerà automaticamente l'anomalia, rifiutandosi
di registrare tale nuovo record.
Quanto all'opportunità di utilizzare un contatore come chiave primaria se ne
parla (pro e contro) anche sul Sito Comune (link qui sotto). Io lo faccio
per il 95% delle mie tabelle; mi evita la noia di gestire la chiave
primaria, che comunque in un database relazionale è bene che esista ma che
nella stragrande magigoranza dei casi serve solamente a rendere univoco un
record.
--
Roberto
---------------------------------------------
il Sito Comune di it.comp.appl.access:
http://www.sitocomune.com
---------------------------------------------

 ha scritto nel messaggio
news:9cm1d3$8a9$1...@pegasus.tiscalinet.it...

Io eviterei per ora il termine "ridondanza"; esistono molti modi per evitare
che un utente inserisca due volte la stessa cosa, uno di questi è utilizzare
una casella di riepilogo...
Ciao.


Per favore rispondi dopo il messaggio precedente come faccio io, grazie.
Questa tua affermazione non l'ho capita, puoi spiegarti meglio?
Ciao.

 wrote in message
news:%hDH6.18614$0t6.6...@news.infostrada.it...
