|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Senior Member
Iscritto dal: Oct 2006
Città: milano
Messaggi: 1439
|
[SQL-forme normali] campo letterale come chiave esterna. viola qualche forma normale?
ciao a tutti ho un database di un piccolo forum semplicissimo fatto da me per la maturità.
utenti(username, password, cognome, nome, data_iscrizione, tipo_utente, cancellato) post(id, messaggio, autore, topic) topic(id, titolo, sezione, autore) sezioni(id, nome, autore) in corsivo le chiavi esterne. visto che ho come chiave primaria di utenti una stringa con lo username e me lo ritrovo come chiave esterna nelle altre tabelle, vorrei sapere se questo viola qualche forma normale. o se in generale questo db non vi sembra normalizzato. grazie |
|
|
|
|
|
#2 |
|
Senior Member
Iscritto dal: May 2005
Città: Trieste
Messaggi: 2285
|
vado a memoria:direi di no...
io ricordo, per le forme normali, vincoli su: campi multivalore dipendenza parziale dalla chiave campi con dipendenza "indiretta" dalla chiave
__________________
neo mini v2 / asus strix z490i / 10600k@? / uh12s / rx6700xt / 32gb ddr4@3200 / sandisk 250 + asenno 1tb / lenovo g34w
trattative concluse : tante... |
|
|
|
|
|
#3 |
|
Senior Member
Iscritto dal: Oct 2006
Città: milano
Messaggi: 1439
|
ti ringrazio, vediamo se qualcuno conferma
|
|
|
|
|
|
#4 | |
|
Senior Member
Iscritto dal: Dec 2004
Messaggi: 3210
|
Quote:
2. autore in "sezioni" non è un tantino ridondante ? Poi, dipende, se solo il direttore o anche altri utenti possano o meno creare sezioni... |
|
|
|
|
|
|
#5 | |
|
Senior Member
Iscritto dal: Oct 2006
Città: milano
Messaggi: 1439
|
Quote:
|
|
|
|
|
|
|
#6 |
|
Senior Member
Iscritto dal: Dec 2004
Messaggi: 3210
|
Non penso sia da considerare uno spreco, anzi.
Io intendevo questo : utenti > username(PK), password, cognome, nome, data_iscrizione, tipo_utente (FK), cancellato) tipi_utente > tipo_utente (PK), descrizione, ..., ... La relazione è : 1 tipo_utente --> molti utenti. Immagina di dover gestire, ad esempio, il numero di post necessari per passare dallo status di "junior member" a quello di "member" ecc... Ecco un'informazione da mettere nella tabella "tipi_utente", e NON direttamente nella tabella "utenti". Tutto ciò va proprio nella direzione della normalizzazione, non credi ? |
|
|
|
|
|
#7 |
|
Senior Member
Iscritto dal: Oct 2006
Città: milano
Messaggi: 1439
|
è vero hai ragione.. però nel mio caso posso dire che è normalizzato? spero di si perchè ormai il forum l'ho fatto tutto così, mi serve dire che è normalizzato per parlare della normalizzazione altrimenti sarebbe un argomento da non tirare in mezzo
|
|
|
|
|
|
#8 | |
|
Senior Member
Iscritto dal: Dec 2004
Messaggi: 3210
|
Quote:
A livello di database ad es. non c'è controllo su nome e cognome. Potrei inserire il classico "Ayeye Brazorf", senza sollevare eccezioni. Ma che io possa fare lo stesso con tipo_utente mi pare un punto debole del DB abbastanza grave. Mettiamola così : se fossi un "esaminatore" non te la passerei liscia. |
|
|
|
|
|
|
#9 | |
|
Senior Member
Iscritto dal: Oct 2006
Città: milano
Messaggi: 1439
|
Quote:
|
|
|
|
|
|
|
#10 | |
|
Senior Member
Iscritto dal: Dec 2004
Messaggi: 3210
|
Quote:
E' come se tu avessi, che so, un DB di una videoteca, senza avere una tabella dei "generi" ( azione, drammatico, commedia, ecc... ), un DB di un magazzino senza una tabella "tipi_prodotto", e così via. tipo_utente sottende un elenco preesistente da cui scegliere un elemento, mentre nome, cognome, password, data, sono dati puri. L'elenco dei tipi_utente possbili, tu dici, lo gestisco dall'applicazione. E se poi vorrò eliminare/aggiungere un tipo_utente ? O peggio ancora, se vorrò modificare un tipo_utente ? Mettiamo che io, amministratore oggi decida che l'utente "senior" debba chiamarsi "superuser". Che faccio ? Vado in giro per il DB e modifico tutti gli utenti che erano senior... Una tabella elenco, tipi_utente, generi, tipi_prodotto, ovunque ci siano elenchi definiti da gestire è la scelta migliore, tutto qui. Era un consiglio, più che altro, ma se hai già scritto anche il Forum... Ma non insegnano che prima di scrivere codice bisognerebbe prima avere definito/normalizzato al 100% il DB ? |
|
|
|
|
|
|
#11 |
|
Senior Member
Iscritto dal: Oct 2006
Città: milano
Messaggi: 1439
|
lo so, ci ho pensato dopo ad aggiungere la normalizzazione
comunque il problema l'ho "risolto" elegantemente.. grazie comunque |
|
|
|
|
|
#12 | |
|
Senior Member
Iscritto dal: May 2004
Città: Londra (Torino)
Messaggi: 3692
|
Quote:
Il professore aveva imposto "Mi raccomando, usate interrupt ed IRQ senno' non ve la passo" E il suo codice iniziava con tutta una serie di EQU costanti per pilotare Interrupt, IRQ, DMA e poi non li ha usati, perche' non aveva capito come usarli. E' passato lo stesso, secondo te hanno letto il codice?
__________________
Se pensi che il tuo codice sia troppo complesso da capire senza commenti, e' segno che molto probabilmente il tuo codice e' semplicemente mal scritto. E se pensi di avere bisogno di un nuovo commento, significa che ti manca almeno un test. |
|
|
|
|
|
|
#13 |
|
Senior Member
Iscritto dal: Oct 2006
Città: milano
Messaggi: 1439
|
provo a indovinare: no
comunque ho capito la lezione ma non ho alternativa, è tardi.. e per inciso, il motivo perché non ho voglia di mettere a posto le cose è che la mia tesina mi fa schifo, avrei voluto fare tutt'altro.. ormai è andata è così |
|
|
|
|
|
#14 |
|
Senior Member
Iscritto dal: Jul 2006
Città: Altamura
Messaggi: 919
|
Utenti potresti scorporarlo ulteriormente....
in : Login(NomeUtente,Password,IdUtente) Con vincolo non duplicabile su NomeUtente Utenti(IDUtente,Nome,Cognome,Data,ecc,ecc...) Cosi avresti un'anagrafica con le relative informazioni di login
__________________
Trattative : http://swdev.altervista.org/VenditeAcquisti.txt Blog Tecnico : http://blogs.dotnethell.it/SwDev/ Desktop : i7 920,GTX580 PALIT, Obsidian 800D, 6GB Corsair, OCZ Vertex 3 240gb. Desktop 2 : iMac 27'' MID 2011 i5, 4GB Ultima modifica di =KaTaKliSm4= : 20-06-2009 alle 18:15. Motivo: Errore di ortografia :) |
|
|
|
|
|
#15 |
|
Senior Member
Iscritto dal: Oct 2006
Città: milano
Messaggi: 1439
|
|
|
|
|
|
|
#16 |
|
Senior Member
Iscritto dal: Jul 2006
Città: Altamura
Messaggi: 919
|
Non è troppo tardi
Comunque se vuoi parlare della normalizzazione leva quel Tipo_Utente.... Se lo lasci cosi ci sarebbero delle anomalie di inserimento in quanto....ti faccio un'esempio, con l'attuale modello E/R se io volessi aggiungere il tipo utente "Appena Iscritto" come dovrei fare?Aggiungere una nuova anagrafica ed un nuovo login? P.S 2) Togli quel "cancellato" nella pratica reale è poco corretto!L'utente che elimina la registrazione non fa piu parte del database, ne consegue che, dovresti creare o una tabella "Storico Anagrafica/Login" o meglio ancora "spostare" i record cancellati su un'altro database(magari annuale) che fa da storico! Io qualche idea te l'ho buttata giu....tocca a te ora E non demordere....in 4 giorni ho scritto tutto il sorgente in Vb.net e creato il database per la gestione di una palestra....l'ho fatto io...puoi farlo tu Buona maturità!Anche a me ahhahahahahah
__________________
Trattative : http://swdev.altervista.org/VenditeAcquisti.txt Blog Tecnico : http://blogs.dotnethell.it/SwDev/ Desktop : i7 920,GTX580 PALIT, Obsidian 800D, 6GB Corsair, OCZ Vertex 3 240gb. Desktop 2 : iMac 27'' MID 2011 i5, 4GB |
|
|
|
|
|
#17 | |
|
Senior Member
Iscritto dal: Oct 2006
Città: milano
Messaggi: 1439
|
Quote:
|
|
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 10:42.




















