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