Bueno los campos autoincrementables, en postgres se llaman
seriales que lo que hacen en realidad es crearte una secuencia, si te fijas en la documentación nos dice que esto:
Código:
CREATE TABLE tablename (
colname SERIAL
);
es igual esto:
Código:
CREATE SEQUENCE tablename_colname_seq;
CREATE TABLE tablename ( colname integer NOT NULL DEFAULT nextval('tablename_colname_seq') );
ALTER SEQUENCE tablename_colname_seq OWNED BY tablename.colname;
Respecto a las llaves foráneas, estas se utilizan cuando te quieres asegurar que datos de tus tablas no apunten a referencias vacias, es decir, por ejemplo si tienes dos tablas:
empleados(codigo,nombre, edad...
ciudad) y otra tabla de ciudad(
codigo, nombre...)
En la tabla empleados en el campo ciudad solo vas a insertar el código de la ciudad que le corresponde en la tabla ciudades, pero para esto debes asegurarte que ese código que quieres insertar realmente exista en la tabla ciudades... es aca donde al crear la tabla de empleados, tienes la posibilidad de especificar que tu campo ciudad de la tabla empleados, es una llave foranea que corresponde al campo codigo de la tabla ciudad, incluso ahi mismo puedes especificar que pasa con tus empleados (de la ciudad que piensas eliminar) cuando eliminas una ciudad de la tabla ciudades.
Checate
esta informacion de postgres sobre las llaves foraneas.