Homepage  Il progetto dsy.it è l'unofficial support site dei corsi di laurea del Dipartimento di Scienze dell'Informazione e del Dipartimento di Informatica e Comunicazione della Statale di Milano. E' un servizio degli studenti per gli studenti, curato in modo no-profit da un gruppo di essi. I nostri servizi comprendono aree di discussione per ogni Corso di Laurea, un'area download per lo scambio file, una raccolta di link e un motore di ricerca, il supporto agli studenti lavoratori, il forum hosting per Professori e studenti, i blog, e molto altro...
In questa sezione è indicizzato in textonly il contenuto del nostro forum


.dsy:it. .dsy:it. Archive > Didattica > Corsi A - F > Basi di dati ~ informatica triennale
 
Un po' di comandi SQL
Clicca QUI per vedere il messaggio nel forum
CaboM.BNA
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à...

n3o
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!

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

johnnyd
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
)

n3o
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) );

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?

xSharKMaNx
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

GiKappa
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

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...

DarkSchneider
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

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 " ..

DarkSchneider
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

DarkSchneider
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

Powered by: vbHome (lite) v4.1 and vBulletin v2.3.1 - Copyright ©2000 - 2002, Jelsoft Enterprises Limited
Mantained by dsy crew (email) | Collabora con noi | Segnalaci un bug | Archive | Regolamento |Licenze | Thanks | Syndacate