buenas tengo dos dudas al respecto de la herencia (generalizacion y especializacion)
estuvee leyendo algunos post y no logre dar con la informacion y me surgen las siguientes dudas
1-. cuando se inserta el registro en la tabla padre y luego al insertar un registro en la tabla hija con el id(fk) q referencia a la tabla padre el valor que insertas en la tabla hija se duplica en la padre? o hay q agregar alguna reestriccion?
2- en la especializacion cuando es disjunta total que se agrega el discriminante x tipo? ese atributo es que? que se hace con ese atributo una restriccion una funcion?
es primera vez q manejo la herencia en la base de datos y pues mas o menos entendi su semantica. de igual forma adjunto el codigo para que vean que si he trabajado sobre el tema.. acepto sugerencias =)
Código SQL:
Ver originalCREATE TABLE pieza
(
modelo CHARACTER VARYING(20) NOT NULL,
nombre CHARACTER VARYING(15),
fabricante CHARACTER VARYING(15),
CONSTRAINT pk_modelo PRIMARY KEY (modelo)
)
WITH (
OIDS=FALSE
);
ALTER TABLE pieza
OWNER TO postgres;
CREATE TABLE disco_duro
(
modelo CHARACTER VARYING(20) NOT NULL,
-- Inherited from table pieza: nombre character varying(15),
-- Inherited from table pieza: fabricante character varying(15),
capacidad text,
puerto text,
CONSTRAINT pk_modelo_disco_duro PRIMARY KEY (modelo),
CONSTRAINT fk_modelo_disco_duro_pieza FOREIGN KEY (modelo)
REFERENCES pieza (modelo) MATCH SIMPLE
ON UPDATE NO ACTION ON DELETE CASCADE
)
INHERITS (pieza)
WITH (
OIDS=FALSE
);
ALTER TABLE disco_duro
OWNER TO postgres;
CREATE TABLE tarjeta_madre
(
modelo CHARACTER VARYING(20) NOT NULL,
-- Inherited from table pieza: nombre character varying(15),
-- Inherited from table pieza: fabricante character varying(15),
socket text,
tipo_memoria text,
max_tamano text,
CONSTRAINT pk_modelo_tarjeta_madre PRIMARY KEY (modelo),
CONSTRAINT fk_modelo_tarjeta_madre_pieza FOREIGN KEY (modelo)
REFERENCES pieza (modelo) MATCH SIMPLE
ON UPDATE NO ACTION ON DELETE CASCADE
)
INHERITS (pieza)
WITH (
OIDS=FALSE
);
ALTER TABLE tarjeta_madre
OWNER TO postgres;