D4rkAng3l
13-02-2008, 00:18
Ciao,
allora il 20 devo portare il progetto per l'esame di basi di dati.
Il mio tema è l'implementazione di un piccolo sistema di aste online, simil ebay anche se molto semplificato. Oggi ho tirato giù lo schema ER, ditemi cosa ne pensate.
Per ora mancano ancora i campi perchè devo pensarci bene ma cmq spiego a parole come funziona:
http://www.siatec.net/andrea/uni/db/progetto.jpg
Le ENTITA'coinvolte sono:
1) UTENTE: che rappresenta gli utenti iscritti al mercatino.
2) INSERZIONE: che rappresenta gli oggetti messi in vendita dai vari utenti e che possono essere visionati e comprati da altri utenti.
3) CATEGORIA: che rappresenta le varie categorie di inserzioni messe in vendita (ad esempio: materiale fotografico, strumenti musicali, auto e motori, elettronica, etcetc).
4) PERMESSI: rappresenta dei permessi che gli utenti iscritti possono eventualmente avere e che li abilitano a moderare determinate categorie di oggetti (per controllare ad esempio che non vi siano messaggi scurrili o per eliminare manualmente annunci che potenzialmente potrebbero essere delle truffe).
A questo punto che ho definito le entità del mio proggetto passiamo a escrivere le RELAZIONI che di fatto implementano le funzionalità del mio sistema di aste online:
1) VENDE: mette in relazione le entità UTENTE ed INSERZIONE, di fatto regola l'inserzione e conterrà la data di scadenza dell'asta, la cardinalità è così impostata perchè un utende iscritto al sercizio può vendere minimo 0 oggetti e massimo n oggetti, vicecersa un oggetto può essere venduto da minimo un utente e massimo un utente (mi sono appena accorto di aver fatto un errore nell'ER...bene...)
2) OFFERTA: indica tutte le offerte che gli utenti del sistema possono fare circa gli oggetti, ogni offerta mette in relazione un certo utente con un certo oggetto che vorrebbe comprare e conterrà la cifra offerta per quell'oggetto e la data con l'orario per poi controllare che non si sia superata la scadenza dell'asta (ma questo ci penserà lo script in PHP che non devo sviluppare ai fini del proggetto). La cardinalità dice che un utente può fare minimo 0 offerte per un certo oggetto e massimo n offerte, viceversa un oggetto può ricevere offerte da minimo 0 utenti e massimo n utenti che vorrebbero comprarlo.
3) COMMENTO: commento semplicemente mette in relazione gli utenti con gli oggetti messi in vendita, a prescindere che un utente voglia comprare o meno un certo oggetto può lasciare un commento sul prodotto che viene venduto (ad esempio se Mario Rossi vuole lasciare un commento sull'Olympus E3 dicendo: "Bellissima macchina, balblabla" potrà farlo), quindi tale relazioni oltre alle chievi di UTENTE e INSERZIONE conterrà anche un campo testuale per il commento.
4) MESSAGGIO: è una relazione ricorsiva su UTENTE che conterrà per chiave un proprio identificatore univoco per ogni messaggio, la chiave dell'utente mittente, la chiave dell'utente destinatario e un campo di testo per il messaggio vero e proprio.
5) FEEDBACK: è la relazione più complessa di tutto il sistema perchè è una relazione ternaria tra UTENTE, UTENTE ed INSERZIONE. Allo stato attuale delle cose per semplicità ho pensato che per ora il feedback viene dato solo dall'acquirente al venditore e non viceversa.
Quindi un utente acquirente darà un valotre di feedback (positivo o neutro o negativo) ad un venditore in relazione ad un certo oggetto che ha comprato.
6) APPARTIENTE: dice semplicemente che un oggetto messo in vendita deve appartenere ad una certa categoria (per esempio la Olympus E3 apparterrà alla categoria: MATERIALE FOTOGRAFICO). La cardinalità dice che un oggetto apparterrà ad una ed una sola categoria e che una categoria potrà contare minimo 0 oggetti e massimo n messi in vendita.
7) SUBCAT è una relazione ricorsiva sull'entità CATEGORIA per poter gestire vari livelli di sottocategorie annidate l'una dentro l'altra, sostanzialmente dice che una categoria può essere sotto categoria di un'altra. Per esempio la categoria "Reflex Digitali" sarà sottocategoria della categoria: "Materiale Fotografico"...eventualmente così facendo potrei anche gestire più livelli di annidamento in modo molto pratico creando ad esempio le categorie: "Reflex Digitali Olympus", "Reflex Digitali Canon", "Reflex Digitali Nikon" come sotto categorie della sotto categoria "Reflex Digitali".
La cardinalità mi dice che una categoria può avere minimo 0 e massimo n categorie figle e viceversa che una categoria figlia può avere al più una categoria padre (anche quà c'è un errorino in quanto potrebbe anche avere 0 categorie padre qualora non fosse annidata).
8) POSSIDE: mi mette in relazione l'entità UTENTE con l'entità PERMESSI e di fatto mi dice quali permessi possiere un utente, un pemesso sarà identificato da un codice e avrà una descrizione testuale ma di fatto la relazione fà solo una associazione tra gli utenti e i suoi permessi, ad esempio:
0052 001
0052 003
0067 004
potrebbe significare che l'utente 0052 avrà abilitati i permessi 001 e 003 mentre l'utente 0067 avrà abilitato il solo permesso 004.
Ora dal momento che si tratta di moderatori e che i moderatori saranno pochi rispetto al numero degli utenti l'eventuale ridondanza di righe la potrei considerare trascurabile perchè tale tabella avrà cmq un'occupazione molto limitata per sua stessa natura.
MODERA: mette in relazione i permessi con le sezioni che possono moderare e dice che un permesso abilita la moderazione ad una ed una sola categoria di oggetti e viceversa che una categoria è moderata da uno ed un solo permesso (ovviamente in fase di trasformazione in schema relazionale questa relazione verrà eliminata e permessi punterà direttamente a categoria).
Ora magari non è perfetto, ma è stato fatto con tantoooo ammmoreeee :D (e soprattutto mi son rotto le balline e vorrei finire al più presto senza smadonnare troppo).
Secondo voi come idea ha una sua decenza? Dite che potrei andare avanti o dovrei rivederlo da 0?
Grazie
Andrea
allora il 20 devo portare il progetto per l'esame di basi di dati.
Il mio tema è l'implementazione di un piccolo sistema di aste online, simil ebay anche se molto semplificato. Oggi ho tirato giù lo schema ER, ditemi cosa ne pensate.
Per ora mancano ancora i campi perchè devo pensarci bene ma cmq spiego a parole come funziona:
http://www.siatec.net/andrea/uni/db/progetto.jpg
Le ENTITA'coinvolte sono:
1) UTENTE: che rappresenta gli utenti iscritti al mercatino.
2) INSERZIONE: che rappresenta gli oggetti messi in vendita dai vari utenti e che possono essere visionati e comprati da altri utenti.
3) CATEGORIA: che rappresenta le varie categorie di inserzioni messe in vendita (ad esempio: materiale fotografico, strumenti musicali, auto e motori, elettronica, etcetc).
4) PERMESSI: rappresenta dei permessi che gli utenti iscritti possono eventualmente avere e che li abilitano a moderare determinate categorie di oggetti (per controllare ad esempio che non vi siano messaggi scurrili o per eliminare manualmente annunci che potenzialmente potrebbero essere delle truffe).
A questo punto che ho definito le entità del mio proggetto passiamo a escrivere le RELAZIONI che di fatto implementano le funzionalità del mio sistema di aste online:
1) VENDE: mette in relazione le entità UTENTE ed INSERZIONE, di fatto regola l'inserzione e conterrà la data di scadenza dell'asta, la cardinalità è così impostata perchè un utende iscritto al sercizio può vendere minimo 0 oggetti e massimo n oggetti, vicecersa un oggetto può essere venduto da minimo un utente e massimo un utente (mi sono appena accorto di aver fatto un errore nell'ER...bene...)
2) OFFERTA: indica tutte le offerte che gli utenti del sistema possono fare circa gli oggetti, ogni offerta mette in relazione un certo utente con un certo oggetto che vorrebbe comprare e conterrà la cifra offerta per quell'oggetto e la data con l'orario per poi controllare che non si sia superata la scadenza dell'asta (ma questo ci penserà lo script in PHP che non devo sviluppare ai fini del proggetto). La cardinalità dice che un utente può fare minimo 0 offerte per un certo oggetto e massimo n offerte, viceversa un oggetto può ricevere offerte da minimo 0 utenti e massimo n utenti che vorrebbero comprarlo.
3) COMMENTO: commento semplicemente mette in relazione gli utenti con gli oggetti messi in vendita, a prescindere che un utente voglia comprare o meno un certo oggetto può lasciare un commento sul prodotto che viene venduto (ad esempio se Mario Rossi vuole lasciare un commento sull'Olympus E3 dicendo: "Bellissima macchina, balblabla" potrà farlo), quindi tale relazioni oltre alle chievi di UTENTE e INSERZIONE conterrà anche un campo testuale per il commento.
4) MESSAGGIO: è una relazione ricorsiva su UTENTE che conterrà per chiave un proprio identificatore univoco per ogni messaggio, la chiave dell'utente mittente, la chiave dell'utente destinatario e un campo di testo per il messaggio vero e proprio.
5) FEEDBACK: è la relazione più complessa di tutto il sistema perchè è una relazione ternaria tra UTENTE, UTENTE ed INSERZIONE. Allo stato attuale delle cose per semplicità ho pensato che per ora il feedback viene dato solo dall'acquirente al venditore e non viceversa.
Quindi un utente acquirente darà un valotre di feedback (positivo o neutro o negativo) ad un venditore in relazione ad un certo oggetto che ha comprato.
6) APPARTIENTE: dice semplicemente che un oggetto messo in vendita deve appartenere ad una certa categoria (per esempio la Olympus E3 apparterrà alla categoria: MATERIALE FOTOGRAFICO). La cardinalità dice che un oggetto apparterrà ad una ed una sola categoria e che una categoria potrà contare minimo 0 oggetti e massimo n messi in vendita.
7) SUBCAT è una relazione ricorsiva sull'entità CATEGORIA per poter gestire vari livelli di sottocategorie annidate l'una dentro l'altra, sostanzialmente dice che una categoria può essere sotto categoria di un'altra. Per esempio la categoria "Reflex Digitali" sarà sottocategoria della categoria: "Materiale Fotografico"...eventualmente così facendo potrei anche gestire più livelli di annidamento in modo molto pratico creando ad esempio le categorie: "Reflex Digitali Olympus", "Reflex Digitali Canon", "Reflex Digitali Nikon" come sotto categorie della sotto categoria "Reflex Digitali".
La cardinalità mi dice che una categoria può avere minimo 0 e massimo n categorie figle e viceversa che una categoria figlia può avere al più una categoria padre (anche quà c'è un errorino in quanto potrebbe anche avere 0 categorie padre qualora non fosse annidata).
8) POSSIDE: mi mette in relazione l'entità UTENTE con l'entità PERMESSI e di fatto mi dice quali permessi possiere un utente, un pemesso sarà identificato da un codice e avrà una descrizione testuale ma di fatto la relazione fà solo una associazione tra gli utenti e i suoi permessi, ad esempio:
0052 001
0052 003
0067 004
potrebbe significare che l'utente 0052 avrà abilitati i permessi 001 e 003 mentre l'utente 0067 avrà abilitato il solo permesso 004.
Ora dal momento che si tratta di moderatori e che i moderatori saranno pochi rispetto al numero degli utenti l'eventuale ridondanza di righe la potrei considerare trascurabile perchè tale tabella avrà cmq un'occupazione molto limitata per sua stessa natura.
MODERA: mette in relazione i permessi con le sezioni che possono moderare e dice che un permesso abilita la moderazione ad una ed una sola categoria di oggetti e viceversa che una categoria è moderata da uno ed un solo permesso (ovviamente in fase di trasformazione in schema relazionale questa relazione verrà eliminata e permessi punterà direttamente a categoria).
Ora magari non è perfetto, ma è stato fatto con tantoooo ammmoreeee :D (e soprattutto mi son rotto le balline e vorrei finire al più presto senza smadonnare troppo).
Secondo voi come idea ha una sua decenza? Dite che potrei andare avanti o dovrei rivederlo da 0?
Grazie
Andrea