MySql

venerdì 17 ottobre 2008 - 12.40

iako17 Profilo | Newbie

Ciao ragazzi,
ho creato un db avente le seguenti 2 tabelle:

tabella aula( id, dip, piano, posti, PRIMARY KEY(aula,dip))

tabella lab(numero pc )


In particolar modo vorrei fare in modo che lab sia una specializzazione di aula. (In pratica non tutte le aule sono lab, ma se lo sono voglio conoscere,in più, anche il numero di pc.)

Ora, quando implemento il db come devo comportarmi? E' giusto aggiungere altri 2 campi alla tabella lab che sono contemporaneamente chiave primaria per la lab e chiave esterna verso aula. Cioè è giusto fare:

tabella lab(
numero pc,
aula,
dip,
primary key(aula,dip),
foreign key (aula,dip),
)

Ciao e grazie

gabriel81 Profilo | Junior Member

Ci vuole una tab aule dove metti i parametri che sono comuni a tutti i tipi di aule.
Poi un altra tab con chiave primaria l'id della tab aule, dove vanno a finire i parametri specifici delle aule lab.

Ovviamente la chiave primaria della tabella lab è int come l'altra però non autoincrementante, in quanto da codice gli attribuisci il valore.

Io personalmente farei una tabella sola comunque........

iako17 Profilo | Newbie

Scusami, mi sono appena accorto che il primo messaggio da me inserito conteneva degli errori di visualizzazione.

In pratica le due tabelle sono:

tabella aula(id,dip,piano,posti);

tabella lab(numeropc);

Ad ogni modo, fare un'unica tabella come dici tu, comporterebbe uno spreco nel caso in cui inserissi 100 aule e 5 laboratori.
In questo caso, infatti, memorizzerei 100 informazioni inutili (Es. numero pc = 0 per 100 volte).

Ecco perchè volevo distinguere le due cose.

gabriel81 Profilo | Junior Member

Hai perfettamente ragione, però col tempo ho imparato che se tanto i record alla fine saranno intorno a 100, chissenefrega!
Mi spiego meglio: se la tabella sarà destinata ad avere 500000 record, allora è meglio usare le relazioni, se no no.
Ed anche nel caso delle 500000 righe, bisogna sempre vedere se relazionare le tabelle conviene (in base alla logica con cui gli utenti interrogheranno il db)

Diciamo che facendo 2 tabelle , comunque non sbagli

iako17 Profilo | Newbie

D'accordo. Ti ringrazio tanto.

lbenaglia Profilo | Guru

>Ciao ragazzi,
>ho creato un db avente le seguenti 2 tabelle:
>
>tabella aula( id, dip, piano, posti, PRIMARY KEY(aula,dip))
>
>tabella lab(numero pc )
>
>
>In particolar modo vorrei fare in modo che lab sia una specializzazione
>di aula. (In pratica non tutte le aule sono lab, ma se lo sono
>voglio conoscere,in più, anche il numero di pc.)
>
>Ora, quando implemento il db come devo comportarmi?

Ciao Antonio ,

Prima di tutto mi pare di aver capito che la PRIMARY KEY(aula,dip) è un errore di battitura, quindi suppongo che la PK sia la colonna ID.
OK, dato che un Lab in sostanza è un'alula con in più un certo numero di PC, perché non generare una semplice relazione 1 a 1 tra le due tabelle utilizzando come FK per la tabella Lab la colonna id?

aula(id, dip, piano, posti)
lab (id, numero pc)

>Ciao e grazie
Prego.

Ciao!
--
Lorenzo Benaglia
Microsoft MVP - SQL Server
http://blogs.dotnethell.it/lorenzo/
http://italy.mvps.org

iako17 Profilo | Newbie

Allora: ho scritto id perchè in realtà la chiave primaria della mia tabella aula è data dalla concatenazione del nome dell'aula e del dipartimento. In un dipartimento non ci sono 2 aule con lo stesso nome. Non ci sono sullo stesso piano, non ci sono a piani diversi (Se a piano terra c'è l'aula 1 non posso avere al quinto piano l'aula 1).

Detto cio', ho organizzato tutto in due tabelle. La cosa che voglio capire è: la tabella laboratorio, che estende la tabella aula, contiene i campi nome_aula, dipartimento e numero_pc. In particolar modo, nome_aula e dipartimento è corretto inserirle sia come PK che come FK? Oppure è un errore? Il fatto che siano PK penso mi dicano che la tabella sia un'entità debole, ma allo stesso tempo devo avere un riferimento alla tabella aula. Quindi a mio modo di vedere le cose il tutto è corretto. Volevo solo una conferma.

lbenaglia Profilo | Guru

>Detto cio', ho organizzato tutto in due tabelle. La cosa che
>voglio capire è: la tabella laboratorio, che estende la tabella
>aula, contiene i campi nome_aula, dipartimento e numero_pc. In
>particolar modo, nome_aula e dipartimento è corretto inserirle
>sia come PK che come FK? Oppure è un errore?
No, non è un errore. Mettendo in relazione le due tabelle su queste colonne otterrai una relazione 1 a 1.

>Il fatto che siano
>PK penso mi dicano che la tabella sia un'entità debole, ma allo
>stesso tempo devo avere un riferimento alla tabella aula.
Cosa intendi con "entità debole"?

>Quindi a mio modo di vedere le cose il tutto è corretto. Volevo solo
>una conferma.
Confermo
Eventualmente potresti definire una PK surrogata in entrambe le tabelle (tipicamente un intero) ed utilizzare questa colonna per creare una relationship 1 a 1 tra le due tabelle. Per garantire l'univocità della coppia aula + dip puoi definire un constraint UNIQUE, mentre in lab ti ritroverai solo le colonne id e numero pc.

Ciao!
--
Lorenzo Benaglia
Microsoft MVP - SQL Server
http://blogs.dotnethell.it/lorenzo/
http://italy.mvps.org

iako17 Profilo | Newbie

Per entità debole intendo una tabella che non ha propri attributi chiave. Nel mio caso, è come se ereditassi gli attributi chiave dalla tabella aula.

Ad ogni modo, grazie ad entrambi per aver risposto.

Ciao
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 !
Copyright © dotNetHell.it 2002-2024
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5