Home Page
Articoli
Tips & Tricks
News
Forum
Archivio Forum
Blogs
Sondaggi
Rss
Video
Utenti
Chi Siamo
Contattaci
Username:
Password:
Login
Registrati ora!
Recupera Password
Home Page
Stanze Forum
SQL Server 2000/2005/2008, Express, Access, MySQL, Oracle
Relazioni fra tabelle
martedì 18 dicembre 2007 - 08.07
Elenco Threads
Stanze Forum
Aggiungi ai Preferiti
Cerca nel forum
denis.basei
Profilo
| Senior Member
222
messaggi | Data Invio:
mar 18 dic 2007 - 08:07
In un database SQL server 2005 express devo creare una relazione del tipo "padre-figli" fra due tabelle, di nome rispettivamente ParLav e ParLavDett. I campi chiave di ParLav sono:
IDMacchina tinyint
IDArticolo nvarchar(20)
IDLAvorazione nvarchar(20)
Non ho ancora strutturato la tabella ParLavDett perchè non so se mi conviene la soluzione 1 oppure 2.
SOLUZIONE 1:
Ripeto i campi chiave del padre ed aggiungo un progressivo sempre in chiave: IDMacchina, IDArticolo, IDLavorazione, IDPrg
SOLUZIONE 2:
Creo in ParLav un campo autoincrementanto che chiamo IDPrg così da non riscrivere in ParLavDett i campi IDMacchina, IDArticolo e IDLavorazione. Scrivo solo IDPrg.
Quale delle due soluzioni è la migliore? Oppure avete qualche soluzione migliore di entrambe?
Grazie
Denis
lbenaglia
Profilo
| Guru
5.625
messaggi | Data Invio:
mar 18 dic 2007 - 12:31
>Quale delle due soluzioni è la migliore? Oppure avete qualche
>soluzione migliore di entrambe?
Ciao Denis,
Io opterei per la seconda soluzione, dato che in questo caso non vedrei l'utilità di definire una chiave surrogata.
Sulla tabella dalla parte molti della relazione definisci un constraint di Foreign Key sulle tre colonne IDMacchina, IDArticolo e IDLavorazione.
>Grazie
Prego.
Ciao!
--
Lorenzo Benaglia
Microsoft MVP - SQL Server
http://blogs.dotnethell.it/lorenzo/
http://italy.mvps.org
denis.basei
Profilo
| Senior Member
222
messaggi | Data Invio:
mar 18 dic 2007 - 14:11
Ciao, forse ho capito male ma se mi suggerisci di definire un constraint di Foreign Key su ParLavDett la soluzione è la 1, non la 2...
lbenaglia
Profilo
| Guru
5.625
messaggi | Data Invio:
mar 18 dic 2007 - 15:36
>Ciao, forse ho capito male ma se mi suggerisci di definire un
>constraint di Foreign Key su ParLavDett la soluzione è la 1,
>non la 2...
Forse non ho capito la domanda
Posta i comandi DDL delle due tabelle ed illustra sempre via codice cosa vorresti fare.
Ciao!
--
Lorenzo Benaglia
Microsoft MVP - SQL Server
http://blogs.dotnethell.it/lorenzo/
http://italy.mvps.org
denis.basei
Profilo
| Senior Member
222
messaggi | Data Invio:
mer 19 dic 2007 - 13:21
506_SQLQuery2.zip
Allego le query di creazione delle due tabelle, come da ipotesi n.1: ad ogni record padre di ParLav esistono n records figli in ParLavDett. Il mio dubbio è se conviene, in alternativa a quanto ho fatto, creare un campo IDDett in ParLav e fare la relazione con ParLavDett solo con IDDett:
ParLav avrebbe come campi chiave IDMacchina, IDArticolo, IDLAvorazione, IDDett
ParLavDett avrebbe come campi chiave IDDett, IDPgr
Denis
lbenaglia
Profilo
| Guru
5.625
messaggi | Data Invio:
mer 19 dic 2007 - 13:29
>Il mio dubbio è se conviene, in alternativa a
>quanto ho fatto, creare un campo IDDett in ParLav e fare la relazione
>con ParLavDett solo con IDDett:
Eventualmente dovresti fare esattamente il contrario, ovvero definire una nuova colonna nella tabella ParLav, renderla PK, inserirla in ParLavDett e definire su di essa un constraint di FK.
Il constraint FK si definisce SEMPRE dalla parte molti della relazione.
Io comunque lascerei le cose come sono.... a parte un piccolo dubbio: per quale motivo utilizzi un data type UNICODE per le stringhe? C'è un vero motivo oppure si tratta di una svista?
Ciao!
--
Lorenzo Benaglia
Microsoft MVP - SQL Server
http://blogs.dotnethell.it/lorenzo/
http://italy.mvps.org
denis.basei
Profilo
| Senior Member
222
messaggi | Data Invio:
mer 19 dic 2007 - 13:36
Grazie, in merito all'unicode ti dirò che in effetti, documentandomi un attimo, non conviene per le stringhe che devo memorizzare. Occupo più spazio per nulla.
Torna su
Stanze Forum
Elenco Threads
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?
Dopo esserti registrato potrai chiedere
aiuto sul nostro
Forum
oppure aiutare gli altri
Consulta le
Stanze
disponibili.
Registrati ora !