El día 6 de abril de 2011 13:58, Jaime Casanova <[email protected]> escribió: > 2011/4/6 Marcos Matamala <[email protected]>: >> >> Yo usaría un esquema como el siguiente. >> >> CREATE TABLE person(id BIGSERIAL PRIMARY KEY, lastname varchar(68) NOT >> NULL UNIQUE); >> CREATE TABLE person_email(id BIGSERIAL PRIMARY KEY, email varchar(200) >> NOT NULL, person_id BIGINT REFERENCES person(id), UNIQUE(email, >> person_id)); >> >> > > Es decir que mantendrias dos índices unicos (el del PK y el del > UNIQUE) y como los dos campos del índice del UNIQUE son NOT NULL es > por definición candidato a PK... porque no poner como PK (email, > person_id) y mantener un solo índice?
el unique(email, person_id) es por el caso de que un email es usado por mas de un usuario(que si existen casos) aun que de todas formas siempre creo una columna id en todas tabla ya que uso ORM's como Doctrine (en su versión 1.2) que siempre esperan que la tabla contengan una columna id si bien puede ser un error o una mejorar no tener esa columna(id innecesaria) para mi trabajo el beneficio de usar un ORM es mayor al error, se entiende ? Saludos.- CREATE TABLE person(name varchar(64) PRIMARY KEY); CREATE TABLE person_email(email varchar(200) NOT NULL, person_name varchar(64) REFERENCES person(name), UNIQUE(email, person_name)); -- Marcos Matamala Fernández Desarrollador Web Betazeta Networks Av. Providencia 929, Piso 4, Santiago, Chile Fono: +56 (2) 6552215 www.betazeta.com - Enviado a la lista de correo pgsql-es-ayuda ([email protected]) Para cambiar tu suscripción: http://www.postgresql.org/mailpref/pgsql-es-ayuda
