• User

    Organizzare un sito in tabelle

    Scusate se il quesito in questione è banale, ma è la prima volta che uso mysql. :arrabbiato:

    Il mio problema è come organizzare i dati in tabelle.

    Praticamente ho circa 300 pagine e ognuna ha 20 link con relativa descrizione. Come devo organizzare il database?

    Io ho pensato a due soluzioni:

    1. Creare una tabella con 3 campi PAGINA, LINK, DESCRIZIONE.
      Questa soluzione sarebbe comoda ma avrei per ogni pagina dei record cosi composti: pagina1, link, descrizione - pagina1, link , descrizione ... e cosi via fino a venti, per poi passare pagina2, link , descrizione etc etc .

    2. Creare per ogni pagina una tabella e inserire i dati in due campi LINK e DESCRIZIONE . Ma in questo modo dovrei creare 300 tabelle!!

    Quale delle due è corretta? Io credo che ci possa essere una via di mezzo per tutte e due le soluzioni, chi mi sa dire qualcosa?


  • User

    @salentonet said:

    Quale delle due è corretta?

    Nessuna delle due ; )

    Crei una tabella "page" con la seguente struttura
    page_id (chiave primaria)
    page

    e una tabella "link" con la seguente struttura
    link_id (chiave primaria)
    link
    fk_page_id (indice non unico, foreign key --> page.page_id)

    Spero che sia chiaro... altrimenti chiedi


  • User

    Grazie per la risposta, ho fatto un po di ricerche sul web per foreign key ed ho trovato questo link http://www.disi.unige.it/person/MoggiE/LI04/MySQL/Demo.html

    dove si consiglia di impostare il tipo di tabella ad INNO DB.

    Ti volevo chiedere, ma è propio necessario il campo link_id della tabella link, a me sembra superfluo :mmm:


  • User

    aggiorno la risposta:

    ho letto che mysql non supporta chiavi esterne e quindi neanche foreign key, per utilizzare questa istruzione bisogna settare le tabelle come INNODB.

    Problema il mio host è su aruba e non mi permette di settare le tabelle come inno db.

    Posso farne a meno? ()


  • User Attivo

    si, puoi farne a meno
    Nel senso che crei il campo e lo usi effettivamente per tenere l'id della pagina a cui fai riferimento (poi se non lo imopsti come foreign key fa niente)

    Il campo link_id non è neccessario in se, però è sempre meglio avere una key per ogni tabellla

    :ciauz:


  • User

    Grazie Riky,
    come al solito sei molto cortese.

    Mi metto subito al lavoro... 🙂


  • User

    Ricapitolando e confermando tutto quello detto da riky78:
    per settare esplicitamente le Foreign Key devi necessariamente usare tabelle INNODB. Se non puoi farlo la struttura puo' rimanere inalterata con tabelle myISAM, ma il database server non potra' garantire l'integrita' del database (nel tuo caso, semplicemente, assicurare che non esistano link associati ad una pagina inesistente e che non sia possibile eliminare una pagina quando ha ancora dei link validi).

    Per quanto riguarda link_id non e' strettamente necessario, ma e' buona norma di stutturazione avere una chiave primaria in ogni tabella.
    Inoltre, assumendo che l'interfaccia al database sia phpMyAdmin, se non setti le chiave primaria (se non ho visto male) perdi alcune funzionalita' utili.

    ciao

    P.S.
    Ho dimentico di indicare che le chiavi primarie sarebbe utile che siano dei campi autoincrement.