View Full Version : [SQL] qualche dubbio da niubbo :D
afsdfdlecosdfsfdcco
15-03-2008, 17:23
Premessa: di SQL non conosco praticamente nulla :D
Allora, per il mio programma avrei bisogno di una tabella simile:
CREATE TABLE SNIPPETS (
CATEGORY VARCHAR(50) NOT NULL,
NAME VARCHAR(100) NOT NULL,
TAGS VARCHAR(200) NOT NULL,
CODE VARCHAR(10000) NOT NULL,
DESCRIPTION VARCHAR(1000) NOT NULL
);
Ecco, avrei qualche dubbio:
1) "TAGS" dovrebbe essere un vettore di "TAG"... Come posso scriverlo? (se si può)
2) se un campo è opzionale è sufficiente togliere "NOT NULL"?
3) "NAME" dovrebbe essere un identificatore (univoco). Come lo scrivo?
4) devo per forza scrivere tutto maiuscolo?
Grazie ^^
(si, sono veramente niubbo con SQL)
amedeoviscido
15-03-2008, 17:51
Premessa: di SQL non conosco praticamente nulla :D
Allora, per il mio programma avrei bisogno di una tabella simile:
CREATE TABLE SNIPPETS (
CATEGORY VARCHAR(50) NOT NULL,
NAME VARCHAR(100) NOT NULL,
TAGS VARCHAR(200) NOT NULL,
CODE VARCHAR(10000) NOT NULL,
DESCRIPTION VARCHAR(1000) NOT NULL
);
Ecco, avrei qualche dubbio:
1) "TAGS" dovrebbe essere un vettore di "TAG"... Come posso scriverlo? (se si può)
2) se un campo è opzionale è sufficiente togliere "NOT NULL"?
3) "NAME" dovrebbe essere un identificatore (univoco). Come lo scrivo?
4) devo per forza scrivere tutto maiuscolo?
Grazie ^^
(si, sono veramente niubbo con SQL)
mmm vediamo. Innanzitutto la clausola "NOT NULL" dice al motore SQL di rifiutare il valore NULL per il campo. Quindi così come l'hai scritta tutti i campi sono obbligatori. Un'altra clausola è "UNIQUE" ovvero unico: non ammette duplicati fra le righe per quel campo. La loro combinazione, NOT NULL UNIQUE, implica che è obbligatorio ed univoco: ovvero è una chiave, e lo puoi scrivere come PRIMARY KEY. Quindi abbiamo risposto al punto 3:
NAME VARCHAR(100) PRIMARY KEY
Per risolvere il quesito al punto 1, io farei diversamente: crea una tabella con chiave primaria la combinazione (NAME,TAG) ovvero
CREATE TABLE nametags (
NAME VARCHAR(100),
TAG VARCHAR(200),
PRIMARY KEY(NAME,TAG)
)
2) SI
4) assolutamente no
amedeoviscido
15-03-2008, 17:59
Se il tuo dbms supporta le foreign key allora scriverei anche:
CREATE TABLE nametags (
NAME VARCHAR(100),
TAG VARCHAR(200),
PRIMARY KEY(NAME,TAG),
NAME REFERENCES snippets(NAME)
)
Ovvero, ti assicuri che il campo "NAME" sia effettivamente presente all'interno del database. Ovviamente, se dovrai inserire dei nuovi tag nella tabella nametags, avrai prima bisogno di creare lo snippet relativo :D
afsdfdlecosdfsfdcco
15-03-2008, 18:15
Grazie mille ad entrambi ^^
Come dbms uso "Derby" (un dbms java)
Per risolvere il quesito al punto 1, io farei diversamente: crea una tabella con chiave primaria la combinazione (NAME,TAG) ovvero
CREATE TABLE nametags (
NAME VARCHAR(100),
TAG VARCHAR(200),
PRIMARY KEY(NAME,TAG)
)
Quindi la mia tabella diverrebbe:
CREATE TABLE SNIPPETS (
CATEGORY VARCHAR(50) NOT NULL,
CODE VARCHAR(10000) NOT NULL,
DESCRIPTION VARCHAR(1000) NOT NULL,
TAGS nametags(100) NOT NULL
);
od ho sbagliato?
amedeoviscido
15-03-2008, 18:24
Derby? Mai sentito!!! Mi spiace, non so se supporta le references. Va bene, comunque il codice da te proposto, mi spiace, è sbagliato. Le tabelle da creare sono due, devi fare in questo modo:
CREATE TABLE SNIPPETS (
CATEGORY VARCHAR(50) NOT NULL,
NAME VARCHAR(100) PRIMARY KEY,
CODE VARCHAR(10000) NOT NULL,
DESCRIPTION VARCHAR(1000) NOT NULL
);
CREATE TABLE nametags (
NAME VARCHAR(100),
TAG VARCHAR(200),
PRIMARY KEY(NAME,TAG),
NAME REFERENCES snippets(NAME)
)
eventualmente togliendo la riga NAME REFERENCES...
In pratica devi creare due tabelle. La prima che contiene i dati sulle snippets, l'altra con i tag. Per recuperare i TAG associati al NAME, basta dare questa semplice query in pasto al motore DB:
SELECT tag FROM nametags WHERE name='abc'
afsdfdlecosdfsfdcco
15-03-2008, 20:15
Derby? Mai sentito!!!
http://www.regdeveloper.co.uk/2006/11/08/java_database_derby/
Va bene, comunque il codice da te proposto, mi spiace, è sbagliato. Le tabelle da creare sono due, devi fare in questo modo:
CREATE TABLE SNIPPETS (
CATEGORY VARCHAR(50) NOT NULL,
NAME VARCHAR(100) PRIMARY KEY,
CODE VARCHAR(10000) NOT NULL,
DESCRIPTION VARCHAR(1000) NOT NULL
);
CREATE TABLE nametags (
NAME VARCHAR(100),
TAG VARCHAR(200),
PRIMARY KEY(NAME,TAG),
NAME REFERENCES snippets(NAME)
)
Quindi non è proprio possibile inserire una tabella in una tabella? 8(
In pratica devi creare due tabelle. La prima che contiene i dati sulle snippets, l'altra con i tag. Per recuperare i TAG associati al NAME, basta dare questa semplice query in pasto al motore DB:
SELECT tag FROM nametags WHERE name='abc'
Ok, grazie mille :)
afsdfdlecosdfsfdcco
15-03-2008, 20:58
Un'altra domanda!
CREATE TABLE `web_null_mail` (
`id` int(255) NOT NULL auto_increment,
`mail` varchar(255) NOT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `mail` (`mail`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1;
Mi interessa la parte in neretto (ho trovato il codice su internet): se io volessi memorizzare testi che contengono anche caratteri accentati (sia lettere italiane che caratteri francesi, tedeschi ecc) cosa dovrei usare? E cosa vorrebbe dire "ENGINE=MyISAM"? Scusate la niubbezza :)
afsdfdlecosdfsfdcco
15-03-2008, 21:56
Sto facendo qualche test ma ho qualche problemino. Vi spiego come funziona il programma.
Al momento salvo i dati in questa struttura:
TreeMap<String, TreeMap<String, Snippet>> data
1) l'utente aggiunge una categoria (non deve essere già presente) - il programma SALVA la categoria in una treemap (come chiave, creando una nuova TreeMap vuota come value)
2) l'utente (selezionando una categoria) crea uno snippet (inserendo subito il nome) - il programma aggiunge una chiave nella TreeMap interna.
3) il programma crea un nuovo pannello di edit dove l'utente inserirà i tags, il codice e la descrizione (quest'ultimo campo è facoltativo).
4) salva i nuovi dati al click su "save"
Problema: come devo creare la/le tabelle per non dover riscrivere tutto?
Ad esempio, la categoria dovrebbe essere inserita prima ancora che venga creato lo snippet!
Grazie per la pazienza :)
amedeoviscido
15-03-2008, 22:23
per il charset puoi sostituire con UTF8 o 16. Per il resto se ne riparla domani!!!
afsdfdlecosdfsfdcco
15-03-2008, 22:28
per il charset puoi sostituire con UTF8 o 16. Per il resto se ne riparla domani!!!
Ok grazie mille intanto!
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.