.dsy:it.
Show 150 posts per page

.dsy:it. (http://www.dsy.it/forum/)
- Basi di dati ~ informatica triennale (http://www.dsy.it/forum/forumdisplay.php?forumid=211)
-- Un po' di comandi SQL (http://www.dsy.it/forum/showthread.php?threadid=32469)


Posted by CaboM.BNA on 19-10-2007 19:05:

Un po' di comandi SQL

Hola gente...
Cercasi qualche "virtuoso" di SQL...

Mettiamo questo esempio:
- ho definito uno schema che si chiama universitario
- all'interno di questo schema ho 2 tabelle: studente e docente
- docente ha 3 attributi/colonne: nome , cognome , corso tenuto
- ho definito l'attributo nome come PRIMARY KEY

Ipotesi: mi accorgo che non va bene come chiave primaria. Con che sitassi devo usare il comando ALTER per ri-definire come chiave primaria (ad es.) nome e cognome?

P.S. (per i più pedanti&pignoli) SO che la Castano ha detto che "una base cosi progettata non va bene, perché la chiave primaria è stata scelta male. Invece del comando ALTER si sarebbe dovuta progettare meglio la tabella..."; la mia è semplice curiosità...


Posted by n3o on 20-10-2007 11:23:

Se hai usato una sintassi del genere:

code:
CREATE TABLE docenti ( nome VARCHAR(50) PRIMARY KEY, cognome VARCHAR(50) NOT NULL, corso INTEGER REFERENCES qualcosa );
il terminale psql dovrebbe restituirti questo messaggio:
code:
NOTICE: CREATE TABLE / PRIMARY KEY will create implicit index "nome_pkey" for table "docenti" CREATE TABLE
Postgres non offre il comodissimo comando DROP PRIMARY KEY quindi bisogna arrangiarsi così:
code:
ALTER TABLE docenti DROP CONSTRAINT nome_pkey; ALTER TABLE docenti ADD CONSTRAINT pr_key PRIMARY KEY (nome, cognome);
Fammi sapere se funziona o trovi una soluzione meno macchinosa!

__________________
The answer is blowing in the wind...


Posted by CaboM.BNA on 20-10-2007 15:33:

perfetto...
appena testato, funziona benissimo... :clap:
grazie mille


Posted by johnnyd on 21-10-2007 12:21:

Quando ho una tabella con relazione n a n... è corretto (come scritto in seguito) usare una sintassi del genere per definire le due chiavi esterne che sono anche chiavi primarie..

CREATE TABLE esamiSvolti (
Matricola char[10],
codEsame int[10]
PRIMARY KEY(Matricola, codEsame)
FOREIGN KEY (codEsame, Matricola)
REFERENCES esami(codEsame), matricole(Matricola)
ON DELETE SET NULL
ON UPDATE CASCADE
)

__________________
My Blog - My Photo Album


Posted by n3o on 21-10-2007 20:39:

Prova con:

code:
CREATE TABLE esamiSvolti ( Matricola INTEGER REFERENCES matricole (Matricola) ON DELETE SET NULL ON UPDATE CASCADE, codEsame INTEGER REFERENCES esami (codEsame) ON DELETE SET NULL ON UPDATE CASCADE, PRIMARY KEY (Matricola, codEsame) );

__________________
The answer is blowing in the wind...


Posted by johnnyd on 25-10-2007 09:28:

in che formato salvereste delle percentuali in un db?

qualcosa del tipo 1.1 per il 10% o direttamente un int/doube contenente il 10?

__________________
My Blog - My Photo Album


Posted by xSharKMaNx on 25-10-2007 10:53:

Originally posted by johnnyd
in che formato salvereste delle percentuali in un db?

qualcosa del tipo 1.1 per il 10% o direttamente un int/doube contenente il 10?


Memorizza un double con il valore effettivo della percentuale quindi nel tuo caso 10 in modo tale da poter reperire il dato e a sua volta effettuare i vari calcoli su di essa


Posted by GiKappa on 26-10-2007 18:54:

scusate,

il prof ferrara all'ultima lezione ha spiegato a grandi linee l'installazione di psql.

io ce l'ho già installato e funzionante, ma vedevo che lui creava un cluster e utilizzava il comando "postmaster" che nella versione per windows non ho trovato.

sapete qual è il suo corrispettivo?

grazie


Posted by CaboM.BNA on 22-11-2007 17:11:

quasi mi vergogno a chiederlo...
pero non sono proprio riuscito a trovare il carattere di escape..

mi spiego meglio.
in una colonna definita come varchar(20) voglio inserire L'armata brancaleone . Siccome bisogna digitare

code:
INSERT INTO nome_tabella VALUES ('L'armata bracaleone')

non so cosa digitare per evitare che il mio (innocente) apostrofo venga interpretato come carattere di terminazione della stringa...


Posted by DarkSchneider on 22-11-2007 20:27:

Originally posted by CaboM.BNA
quasi mi vergogno a chiederlo...
pero non sono proprio riuscito a trovare il carattere di escape..

mi spiego meglio.
in una colonna definita come varchar(20) voglio inserire L'armata brancaleone . Siccome bisogna digitare
code:
INSERT INTO nome_tabella VALUES ('L'armata bracaleone')

non so cosa digitare per evitare che il mio (innocente) apostrofo venga interpretato come carattere di terminazione della stringa...


dovrebbe bastare questo:

INSERT INTO nome_tabella VALUES (' L''armata brancaleone') :
con due apici, il secondo annulla il primo

per lo meno funziona così con il PL/SQL di oracle, anche se non so se sia quello utilizzato durante il corso di basi dati :D:D


Posted by CaboM.BNA on 22-11-2007 20:47:

:approved:
ti ringrazio...
ho appena testato, è proprio come dicevi tu..
certo che io sono babbo però... :sbonk:
non avevo provato la COSA PIU' OVVIA...
avevo immediatamente pensato solo caratteri come \ o " ..


Posted by DarkSchneider on 22-11-2007 21:06:

Originally posted by CaboM.BNA
quasi mi vergogno a chiederlo...
pero non sono proprio riuscito a trovare il carattere di escape..

mi spiego meglio.
in una colonna definita come varchar(20) voglio inserire L'armata brancaleone . Siccome bisogna digitare
code:
INSERT INTO nome_tabella VALUES ('L'armata bracaleone')

non so cosa digitare per evitare che il mio (innocente) apostrofo venga interpretato come carattere di terminazione della stringa...


dovrebbe bastare questo:

INSERT INTO nome_tabella VALUES (' L''armata brancaleone) :
con due apici, il secondo annulla il primo

per lo meno funziona così con il PL/SQL di oracle, anche se non so se sia quello utilizzato durante il corso di basi dati :D:D


Posted by DarkSchneider on 23-11-2007 20:51:

Originally posted by CaboM.BNA
:approved:
ti ringrazio...
ho appena testato, è proprio come dicevi tu..
certo che io sono babbo però... :sbonk:
non avevo provato la COSA PIU' OVVIA...
avevo immediatamente pensato solo caratteri come \ o " ..


di niente .. figurati :D


All times are GMT. The time now is 08:17.
Show all 13 posts from this thread on one page

Powered by: vBulletin Version 2.3.1
Copyright © Jelsoft Enterprises Limited 2000 - 2002.