On Wed, 21 Mar 2012 16:09:21 +0100, Simone Federici wrote:

cmq tornando al problema che è tuttaltro che risolto,
ci sono le FK che sono nullable :-)
quindi il problema mi si ripresenta da dietro l'angolo

CREATE TABLE sample_chapter
(
  b_name character varying(100) NOT NULL,
  b_author character varying(100),

Dipende da cosa definisci per "chiave". Io ho definito una mia tabella così:

create table other (
  id serial primary key,
  name varchar(100),
  author varchar(100),
  constraint fkey_book foreign key (name, author)
    references book (name, author));

prova ad inserire un solo record ('a', 'b') nella tua tabella book, e poi:

    test=> insert into other (name, author) values ('a', 'b');
    INSERT 0 1

fino a qui tutto bene.

    test=> insert into other (name, author) values ('c', 'd');
ERROR: insert or update on table "other" violates foreign key constraint "fkey_book"

fino a qui tutto bene.

    insert into other (name, author) values ('c', null);

e ora che dovrebbe fare il db? 'c' non esiste, ma ('c', null) non può esistere. Ma c'è il null: questo porta il record al di fuori del dominio, quindi non c'è alcun tentativo di rinforzare la chiave. Così, forse sorprendentemente, forse no, questo insert funziona.

    INSERT 0 1

Il problema è quello che ti ho detto nella prima riga della prima risposta: ('c', null) non è una chiave. Sono solo due valori buttati in due campi.

Detto questo, il problema di serializzare una coppia generica non è difficile. Giusto per darti più corda con la quale impiccarti...

test=> create table pairs (a text, b text);
CREATE TABLE
test=> insert into pairs values ('a', 'b');
INSERT 0 1
test=> insert into pairs values ('a', '');
INSERT 0 1
test=> insert into pairs values ('a', null);
INSERT 0 1
test=> select coalesce(quote_literal(a), '') || '_' || coalesce(quote_literal(b), '') from pairs;
 ?column?
----------
 'a'_'b'
 'a'_''
 'a'_
(3 rows)

Solo, non dire che sono fkey: sono la serializzazione di due valori generici.

--
Daniele Varrazzo - Develer S.r.l.
http://www.develer.com
_______________________________________________
Python mailing list
Python@lists.python.it
http://lists.python.it/mailman/listinfo/python

Rispondere a