Pagina 1 di 4 1 2 3 ... ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 37
  1. #1

    [mysql concettuale] progetto logico database

    Salve amici,
    ho un grossissimo problema con un progetto di un database.
    La mia richiesta è abbastanza complessa, quindi cercherò di essere chiaro e conciso.

    Ho una tabella iniziale chiamata "categorie" strutturata in questo modo

    codice:
    MONDO
    |__ Asia
    |__ Europa
    |   |__ Grecia
    |   |__ Italia
    |   |   |__ Sardegna
    |   |   |   |__ Oristano
    |   |   |   |   |__ Scano
    |   |   |   |
    |   |   |   |__ Cagliari
    |   |   |   |__ Nuoro
    |   |   |   |__ Sassari
    |   |   |
    |   |   |__ Liguria
    |   |   |__ Toscana
    |   |
    |   |__ Francia
    |   |__ Spagna
    |   |__ Germania
    |
    |__ America
    |__ Africa
    |__ Oceania
    Ammetto che non sia la soluzione migliore... ma la tabella è composta dai seguenti campi:

    ID (PRIMARY KEY)
    NOME (il nome della categoria)
    SUPER (FOREIGN KEY su ID)

    SUPER contiene l'ID del campo superiore
    esempio:
    codice:
    ID	NOME	SUPER
    1	mondo	0
    2	Asia	1
    3	Europa	1
    4	Grecia	3

    A queste categorie "partecipano" più oggetti di un'altra tabella.
    Per comodità questi oggetti saranno NOTIZIE.
    Nella mia situazione di partenza le NOTIZIE potevano "partecipare" (ovvero far parte) a una sola categoria, quindi erano così strutturate:

    ID (PRIMARY KEY)
    TITOLO
    TESTO
    IDCAT (ID della categoria a cui appartiene la notizia)


    ORA VOGLIO CAMBIARE LE CARTE IN TAVOLA

    Sempre utilizzando queste tabelle (o eventualmente creandone nuove per i riferimenti)

    vorrei che le notizie facessero parte contemporaneamente di N categorie e che per visualizzare le notizie devono essere filtrate da questi criteri

    idcat_1=X&idcat_2=Y&...&idcat_N=Z

    in pratica se non le specifico tutte mi da i link per filtrare quelle da visualizzare.

    faccio un esempio pratico con 2 livelli (da estendere a N livelli)

    il giornale è composto dagli argomenti (cultura, attualità, cronaca, sport(calcio, tennis) )
    e dai numeri di uscita del giornale (gen2005, feb2005, mar2005)

    Una notizia fa necessariamente parte di due categorie parallele ovvero fa parte di un numero di uscita (ad esempio gen2005) e fa parte di un argomento del giornale (es. sport)

    questo non è difficile da implementare: basta fare una tabella di riferimento

    ID_categoria (PRIMARY KEY)
    ID_notizia (PRIMARY KEY)

    e usare una JOIN per leggerla

    il punto è:

    - se clicco sul numero di uscita mi appaiono gli argomenti contenuti (cultura, attualità, cronaca, sport...), cliccando su un argomento mi devono apparire le notizie di quell'argomento e contemporaneamente di quel numero.

    - viceversa se clicco sull'argomento, mi devono apparire i numeri di uscita presenti in archivio, e cliccando sul numero di uscita mi deve dare le notizie di quell'argomento e contemporaneamente di quel numero.

    - se invece clicco su un link dove è specificato sia il numero sia l'argomento, mi deve dare direttamente tutte le notizie relative.


    in questo caso l'albero si incrocia perchè il figlio è padre del padre e viceversa il padre è figlio del figlio.

    Infatti l'albero potrebbe essere così strutturato
    codice:
    ARCHIVIO
    |__ gen2005
    |   |__ cultura
    |   |__ attualità
    |   |__ cronaca
    |   |__ sport
    |       |__ calcio
    |       |__ tennis
    |
    |__ feb2005 
    |   |__ cultura
    |   |__ attualità
    |   |__ cronaca
    |   |__ sport
    |       |__ calcio
    |       |__ tennis
    |
    |__ mar2005 
        |__ cultura
        |__ attualità
        |__ cronaca
        |__ sport
            |__ calcio
            |__ tennis
    
    E ALLO STESSO TEMPO
    
    ARCHIVIO
    |__ cultura
    |   |__ gen2005
    |   |__ feb2005
    |   |__ mar2005
    |
    |__ attualità
    |   |__ gen2005
    |   |__ feb2005
    |   |__ mar2005
    |
    |__ cronaca
    |   |__ gen2005
    |   |__ feb2005
    |   |__ mar2005
    |
    |__ sport
        |__ gen2005
        |__ feb2005
        |__ mar2005
    in pratica ogni volta che inserisco un numero di uscita, automaticamente quel numero deve avere la struttura degli argomenti dei precedenti

    E INFINE IL MIO PROBLEMA è
    come faccio a ottenere un albero del genere senza dover ripetere ogni volta la struttura? Qual'è la soluzione migliore al mio caso, escluso il ricovero coatto?

    ringrazio infinitamente tutti quelli che hanno letto questo post fino in fondo... e sarò eternamente grato chi saprà dare una risposta a questo urgentissimo problema.

    grazie
    Matteo
    «Se leggi dimentichi, se vedi capisci, se fai impari» Piaget

  2. #2

    Il silenzio è spesso la cosa migliore. Pensa ... è gratis.

  3. #3
    [supersaibal]Originariamente inviato da piero.mac
    Gia' letto questo?

    http://forum.html.it/forum/showthrea...hreadid=790505 [/supersaibal]
    certo che si...
    nel primo post ho scritto
    Ammetto che non sia la soluzione migliore...
    e infatti non lo è... ma la cosa che chiedo è ben diversa dalla struttura semplicemente ad albero...

    PER SEMPLIFICARE LE COSE VI POSTO LA STRUTTURA COME VORREI CHE SIA
    ricordatevi che "numeri" e "argomenti" sono 2 solo in questo caso... e il numero di questi livelli potrebbe variare
    «Se leggi dimentichi, se vedi capisci, se fai impari» Piaget

  4. #4
    non c'ho capito molto di questa cosa, secondo me la complicazione viene dal fatto che hai mischiato concetti inerenti l'organizzazione dei dati con concetti inerenti la rappresentazione in uscita di questi dati.

    Prima organizzi i dati, poi vedrai il modo migliore per rappresentarli nelle pagine.

    In termini più tecnici, io non ho capito con certezza né quali siano le entità, né quali siano le relazioni che legano tali entità.
    Quindi, partendo dal principio, hai uno schema entità relazioni dei tuoi dati? Se non lo hai, l'errore è questo.

  5. #5
    allora...
    le entità sono:
    "categorie"
    "notizie"

    le relazioni sono:
    ricorsiva per "categorie"
    N->N per notizie->categorie
    per cui utilizzo una tabella del tipo:
    ID_CATEGORIA (PRIMARY)
    ID_NOTIZIA (PRIMARY)

    fin qui ci siamo?

    io voglio che dinamicamente

    nel caso in cui non venga specificato l'argomento
    IL NUMERO sia IL PADRE DEGLI ARGOMENTI

    nel caso in cui non viene specificato il numero
    L'ARGOMENTO è IL PADRE DEI NUMERI


    il punto è che non riesco ad IMMAGINARE (praticamente) come potrebbe essere modificata la struttura e sucessivamente effettuare le query per la visualizzazione dei dati
    «Se leggi dimentichi, se vedi capisci, se fai impari» Piaget

  6. #6
    [supersaibal]Originariamente inviato da Mackey
    allora...
    le entità sono:
    "categorie"
    "notizie"

    le relazioni sono:
    ricorsiva per "categorie"
    N->N per notizie->categorie
    per cui utilizzo una tabella del tipo:
    ID_CATEGORIA (PRIMARY)
    ID_NOTIZIA (PRIMARY)

    fin qui ci siamo?

    io voglio che dinamicamente

    nel caso in cui non venga specificato l'argomento
    IL NUMERO sia IL PADRE DEGLI ARGOMENTI

    nel caso in cui non viene specificato il numero
    L'ARGOMENTO è IL PADRE DEI NUMERI
    [/supersaibal]
    non hai spiegato ancora cosa sia "numero" né cosa sia "argomento", quindi il tuo schema ER non è ancora completo.

  7. #7


    "numero" e "argomento" sono 2 sottocategorie di "cartaceo"

    sono semplicemente record della tabella "categorie"
    «Se leggi dimentichi, se vedi capisci, se fai impari» Piaget

  8. #8
    [supersaibal]Originariamente inviato da Mackey
    "numero" e "argomento" sono 2 sottocategorie di "cartaceo"

    sono semplicemente record della tabella "categorie" [/supersaibal]
    Ok, allora se sono normali categorie, mi sfugge quale sia il problema nello scrivere le query. :master:

    Vuoi tutti i dati di un numero?
    Li estrai e li ordini per argomento.

    Vuoi tutti i dati di un argomento?
    Li estrai e li ordini per numero.

  9. #9
    ok... benissimo, ci siamo sincronizzati
    il problema è

    per vedere la lista delle notizie di un determinato numero e di un determinato argomento (tradotto: se devo vedere gli articoli di attualità del mese di gennaio) devo specificare entrambi i criteri...

    se prima facevo

    ?idcat=3
    (dove 3 è il numero della categoria)

    ora dovrei fare

    ?idcat[numero]=X&idcat[argomento]=Y

    ma come renderlo SCALABILE?
    «Se leggi dimentichi, se vedi capisci, se fai impari» Piaget

  10. #10
    Mah, volendo semplificare il tutto, per me il numero non sarebbe necessariamente una categoria, basterebbe un campo data nella notizia, visto che i numeri si riferiscono proprio alla data.

    Se invece vuoi tenerlo così, puoi fare qualcosa del genere (non badare alla sintassi, segui il concetto):

    SELECT count(id_notizia) AS num_rel FROM tabella_relazioni WHERE id_cat = 1 OR id_cat = 2 GROUP BY id_notizia;

    Poi in fase di lettura controlli il campo num_rel. Se è 2 vuol dire che la notizia appartiene a entrambe le categorie, altrimenti a una sola di esse e quindi va ignorato.

    Non so se sia il metodo migliore, è il primo che mi è venuto in mente.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.