|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Senior Member
Iscritto dal: Jul 2008
Messaggi: 1426
|
[MySql]Come strutturare un database (tags)
Avrei bisogno di un vostro aiuto perchè non so bene come strutturare un database!
Io ho una tabella nella quale devo immagazzinare i dati di alcune gite che possono essere svolte in montagna. La tabella contiente i campi id, nome-gita, descrizione-gita. A queste gite vorrei però aggiungere dei tags ossia degli attributi che possano assumere alcuni valori predefiniti. Ad esempio: luogo della gita: mare/montagna/lago stagione consigliata: estate/inverno/autunno/primavera difficoltà: 1/2/3/4/5 possibilità di avere una guida: si/no Questi tag dovrebbero però poi poter essere associati alle gite. Io avevo pensato di creare una tabella nella quale definire i tags e un'altra in cui stabilire quali tags sono associati alle varie gite. Ma la cosa non va bene perchè già nella tabella in cui immagazzinare i tags ci sarebbero dei problemi: alcuni tags potrebbero avere 5 valori, altri sono 2, ecc. Inoltre ad ogni gita potrebbero essere associati un numero illimitato di tags. Consigli? |
|
|
|
|
|
#2 |
|
Junior Member
Iscritto dal: Oct 2010
Messaggi: 16
|
provo a dirti la mia:
crei delle tabelle apposite per questi tags, ad esempio luogo della gita: mare/montagna/lago e poi banalmente nella tabella principale dove inserisci le gite nell'attributo "luogo gita" crei un vincolo di integrità referenziale alla tabella prima creata, così facendo i valori dell'attributo dovranno essere contenuti per forza anche nella tabella esterna per essere validi. Inoltre per la difficoltà puoi introdurre un vincolo di controllo che controlli che il valore sia intero e compreso tra 1 e 5 ad esempio |
|
|
|
|
|
#3 | |
|
Senior Member
Iscritto dal: Jul 2008
Messaggi: 1426
|
Quote:
Sempre che io abbia capito ciò che mi volevi dire! |
|
|
|
|
|
|
#4 |
|
Senior Member
Iscritto dal: May 2001
Messaggi: 12869
|
Alcuni database ti permettono di definire i tuoi personali tipi di dato, alcuni credo supportano direttamente gli ENUM, che è quello che ti serve nel tuo caso.
|
|
|
|
|
|
#5 | |
|
Senior Member
Iscritto dal: Jul 2008
Messaggi: 1426
|
Quote:
Non si potrebbe avere una tabella del tipo: ID | NOME TAG | VALORI 1 | stagione | estate/inverno Cioè non esistono dei campi che nei quali si possano inserire degli array? (nel mio esempio, il campo "VALORI") |
|
|
|
|
|
|
#6 |
|
Senior Member
Iscritto dal: Jul 2008
Messaggi: 1426
|
Ho letto online che utilizzando serialize() su un array si riesce ad ottenere una stringa sola che "contenga" tutto un array e viceversa riottenerla usando unserialize(). Così riescono a salvare degli array in un singolo campo.
Tuttavia così non calerebbero molto le prestazioni? In realtà il sito sarà piccolo e quindi la cosa potrebbe essere trascurabile ma vorrei più che altro capire quale sia il modo più pulito di gestire la situazione! |
|
|
|
|
|
#7 |
|
Member
Iscritto dal: May 2011
Messaggi: 57
|
Proposte (non) indecenti
Ciao a tutti,
vediamo se ti piace questa soluzione: TABELLA GITA --------------- id: int - PK nome: varchar(255) descrizione: varchar(255) difficolta: int(1) consigliato_primavera: bool consigliato_estate: bool consigliato_autunno: bool consigliato_inverno: bool possibilita_guida: bool TABELLA TIPO_LUOGO ---------------- id: int PK nome: varchar(255) TABELLA GITA_LUOGHI ---------------------- id_tipo_luogo: int id_gita: int Chiave sulla coppia id_tipo_luogo - id_gita Così facendo ho "razionalizzato" le tue richieste, per poterli navigare anche con una ricerca. Ho creato la "tipo_luogo" per permettere combinazioni tipo "Laghi montani", oppure "Canneto in Palude di Lago Marittimo" tutti gli altri, io li ho messi come attributo alla tabella gita... discutibile, ovvio... ma io farei così. La cosa semplice semplice ma che non mi piace sarebbe avere la tabella "TAG"... TABELLA TAG ------------- id: int PK nome_tag: varchar(255) TABELLA GITA -------------- id: int PK nome: varchar(255) descrizione: varchar(255) TABELLA TAG_GITA ------------------- id_tag: int id_gita: int Così si potrebbero associare tutti i tag "censiti" nella tabella TAG... solo che a me non piace... troppo "generico" e poco "semantico" (non mi dice nulla...) Che ne dici ? Ciao, Filo
__________________
Buckle your seatblet Dorothy, 'cause Kansas is going bye bye |
|
|
|
|
|
#8 | |
|
Senior Member
Iscritto dal: Nov 2001
Città: Boscoreale (NA)
Messaggi: 421
|
Quote:
Cmq basta aggiungere 2 campi nella tabella gita. Questo metodo ti permetterà di ottimizzare al meglio le ricerche...soprattutto per le tag. Per fare un esempio questo è il metodo che usa anche wordpress per salvare le tag. Ci sarebbero anche altri metodi ma nessun così efficace per le ricerche... Ultima modifica di black_wizard : 04-06-2011 alle 12:00. |
|
|
|
|
|
|
#9 |
|
Senior Member
Iscritto dal: Jul 2008
Messaggi: 1426
|
La tua idea non sarebbe male ma il fatto è che i tag che vi ho proposto io erano solo degli esempi mentre io vorrei dare all'admin la più completa personalizzazione dei tags.
L'unica idea che ho avuto è la seguente. Non sarà molto pulita e neppure a me piace troppo ma permette una personalizzazione completa e su un sito piccolo non dovrebbe dare problemi di sorta. TABELLA GITA --------------- id: int PK nome_gita: varchar (255) descrizione: text TABELLA TAGS ---------------- id: int nome_tag: varchar (255) TABELLA VALORI TAGS ------------------------- tag_corrispondente: int valore: varchar (255) TABELLA RELAZIONI ---------------------- id_gita: int id_valori: int In questo modo avrei una tabella dove inserire tutti i tags. I valori di essi sarebbero inseriti in un'altra tabella e collegati ad essi tramite il campo id. Infine alle varie gite, nella tabella relazioni, associerò tutte le gite ai vari tags. E' la soluzione più semplice che mi sia venuta in mente per lasciare all'admin la più completa personalizzazione dei tags. In fin dei conti quando si dovrà effettuare una ricerca si agirà solamente sulla tabella relazioni mentre poi il software dovrà interrogare la tabella tags e la tabella valori tags solo per ottenere il nome del tags e il nome del valore. Che ne pensate? |
|
|
|
|
|
#10 |
|
Senior Member
Iscritto dal: Nov 2001
Città: Boscoreale (NA)
Messaggi: 421
|
ah ora ho capito cosa intendi.
In pratica le tag sono raggruppate in una specie di categoria...perchè c'è la tag che sarebbe la "stagione" e la tag "luogo". Cmq l'ultimo metodo che hai scritto va bene anche se potevi fare in modo diverso..tipo così TABELLA GITA --------------- id: int PK nome_gita: varchar (255) descrizione: text TABELLA TAGS ---------------- id: int nome_tag: varchar (255) categoria_tag: int TABELLA Categoria ------------------------- id_categoria: int nome_categoria: varchar (255) TABELLA RELAZIONI ---------------------- id_gita: int id_valori: int in poche parole il campo tags sarebbe così TABELLA TAGS ---------------- id Valore Categoria 1 Estate 3 TABELLA Categoria ------------------------- id Nome 3 Stagione |
|
|
|
|
|
#11 |
|
Senior Member
Iscritto dal: Jul 2008
Messaggi: 1426
|
Si esatto mi ero dimenticato di scrivere un campo
Grazie mille! Allora direi che farò così! |
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 20:54.




















