Progetto BD

di il
7 risposte

Progetto BD

Buongiorno, spero di essere nella sezione giusta. Detto questo non voglio la "pappa pronta", ma semplicemente esporre un problema riguardo al quale non riesco a venirne a capo.
Il problema in cui mi sono imbattuto è il seguente ovvero:

tenere traccia dei voti che un utente ha fatto sui contenuti offerti dal sito es.("Franco","Neri","Peaky Blinders","5)
I contenuti sono da intendersi come serie TV, film, documentari ecc.. io gli ho considerati come entità figlie le quali riferiscono direttamente a contenuto il padre.

La mia idea era quella di creare un entità debole perché mettendo in relazione direttamente utente con contenuto, una volta cancellato l'utente perdo anche i voti relativi a quest ultimo. Un altra idea era quella di inserire una business rules però non so se è corretto siccome non so se effettivamente è esprimibile direttamente sullo schema E-R.

Grazie per l'eventuale risposta

7 Risposte

  • Re: Progetto BD

    Addios ha scritto:


    tenere traccia dei voti che un utente ha fatto sui contenuti offerti dal sito es.("Franco","Neri","Peaky Blinders","5") anche dopo la cancellazione dell'utente dal database.
    Puoi spiegare meglio di cosa si tratta per "i non addetti ai lavori"? Io sono uno di quelli.

    Esponi le prime tabelle (inclusi i nomi propri dei campi) che avresti messo in campo e discutiamo insieme cosa non va.
  • Re: Progetto BD

    Non capisco cosa intende per "i non addetti ai lavori"
  • Re: Progetto BD

    Addios ha scritto:


    Non capisco cosa intende per "i non addetti ai lavori"
    Non conosco l'argomento e dovresti (almeno a me) spiegarlo.
    "Contenuti offerti dal sito". Di quale sito parli? Cosa sono questi contenuti? Come funziona tutto il progetto?
  • Re: Progetto BD

    Addios ha scritto:


    ...
    tenere traccia dei voti che un utente ha fatto sui contenuti offerti dal sito es.("Franco","Neri","Peaky Blinders","5") anche dopo la cancellazione dell'utente dal database.
    ...
    La richiesta non ha senso.
    Se vuoi/devi tenere traccia di qualcosa che avviene a livello di 'figlio' (i voti) non puoi cancellare il 'padre' (l'utente).

    Detto questo potresti considerare l'utilizzo di una (o più) tabella(e) per la gestione di una specie di audit trail tenendo traccia di chi ha modificato (votato) cosa.
    Un'altra alternativa che mi viene in mente : potresti mettere un campo bool nella tabella user che indica che l'utente è disattivato (e quindi non lo cancelli e non lo utilizzi più per gli inserimenti futuri).

    Altre idee non mi vengono.
  • Re: Progetto BD

    La soluzone e' OVVIA:
    una cosa sono i voti
    una cosa e' l'utente che ha votato!
    se assegni ad ogni voto un ID univoco, potresti usare qualcosa del tipo:

    [utente(id)] -> [utente:id,voto:id] -> [voto(id)]

    oppure:

    [utente(id)] -> [voto(utente:id, voto)]

    cioe' [voto] ha una FK verso [utente] che serve SOLO per sapere quale utente ha votato, ma con la CONDIZIONE che se l'utente non esiste, VA BENE LO STESSO. In altri termini, SE cancelli l'utente, NON CANCELLI i suoi voti!
  • Re: Progetto BD

    migliorabile ha scritto:


    La soluzone e' OVVIA:
    una cosa sono i voti
    una cosa e' l'utente che ha votato!
    se assegni ad ogni voto un ID univoco, potresti usare qualcosa del tipo:

    [utente(id)] -> [utente:id,voto:id] -> [voto(id)]

    oppure:

    [utente(id)] -> [voto(utente:id, voto)]

    cioe' [voto] ha una FK verso [utente] che serve SOLO per sapere quale utente ha votato, ma con la CONDIZIONE che se l'utente non esiste, VA BENE LO STESSO. In altri termini, SE cancelli l'utente, NON CANCELLI i suoi voti!
    Il problema è che nel testo di progettazione non si fa riferimento a nessun "id voto" quindi non avrei abbastanza informazioni per identificarla come entità se non attraverso identificatori esterni. Infatti avevo pensato semplicemente a una relazione N a N tra utente e contenuto.
    Il testo afferma solamente che gli utenti possono votare qualunque contenuto: serietv, film o programmi al fine di poter calcolare una media dei voti ( vincolo derivabile).
  • Re: Progetto BD

    Cancella solo i campi utente lasciando l'id e lascia le relazioni per come sono
    (in alternativa invece che cancellare il nome inserisci "utente cancellato" al posto del nome e togli i dati sensibili...
    in altre parole: non cancellare il record.
Devi accedere o registrarti per scrivere nel forum
7 risposte