una tablas tabla restricciones primary llave foranea eliminar desde delete crear creada con cero aprender agregar sql postgresql foreign-keys relational-database foreign-key-relationship

tablas - on delete cascade postgresql



sintaxis de clave externa postgresql (1)

Tengo 2 tablas como verá en mi código posgresql a continuación. La primera tabla Students tiene 2 columnas, una para student_name y la otra student_id, que es la clave principal. En mi segunda tabla llamada pruebas, esta tiene 4 columnas, una para subject_id, una para subject_name, luego una para un estudiante con el puntaje más alto en una asignatura que es más alta. Estoy tratando de hacer que el "HighStudent_id" se refiera a student_id en mi tabla de alumnos. Este es el código que tengo a continuación, no estoy seguro de si la sintaxis es correcta:

CREATE TABLE students ( student_id SERIAL PRIMARY KEY, player_name TEXT); CREATE TABLE tests ( subject_id SERIAL, subject_name, highestStudent_id SERIAL REFERENCES students);

¿Es correcta la sintaxis más highestStudent_id SERIAL REFERENCES students ? porque he visto otro como el más highestStudent_id REFERENCES students(student_id))

¿Cuál sería la forma correcta de crear la clave externa en postgresql por favor?


Asumiendo esta tabla:

CREATE TABLE students ( student_id SERIAL PRIMARY KEY, player_name TEXT );

Hay cuatro formas diferentes de definir una clave externa (cuando se trata de una sola columna PK) y todas conducen a la misma restricción de clave externa:

  1. En línea sin mencionar la columna de destino:

    CREATE TABLE tests ( subject_id SERIAL, subject_name text, highestStudent_id integer REFERENCES students );

  2. En línea con mencionar la columna de destino:

    CREATE TABLE tests ( subject_id SERIAL, subject_name text, highestStudent_id integer REFERENCES students (student_id) );

  3. Fuera de línea dentro de la create table :

    CREATE TABLE tests ( subject_id SERIAL, subject_name text, highestStudent_id integer, constraint fk_tests_students foreign key (highestStudent_id) REFERENCES students (student_id) );

  4. Como una declaración separada de la alter table :

    CREATE TABLE tests ( subject_id SERIAL, subject_name text, highestStudent_id integer ); alter table tests add constraint fk_tests_students foreign key (highestStudent_id) REFERENCES students (student_id);

Cuál prefieres es cuestión de gustos. Pero debes ser consistente en tus scripts. Las dos últimas declaraciones son la única opción si tiene claves foráneas que hacen referencia a un PK que consta de más de una columna; en ese caso, no puede definir el FK "en línea", por ejemplo, foreign key (a,b) references foo (x,y)

Solo las versiones 3) y 4) le permitirán definir su propio nombre para la restricción FK si no le gustan los generados por el sistema de Postgres.

El tipo de datos en serial no es realmente un tipo de datos. Es solo una breve notación manual que define un valor predeterminado para la columna tomada de una secuencia. Por lo tanto, cualquier columna que haga referencia a una columna definida como serial debe definirse utilizando el integer tipo base apropiado (o bigint para columnas bigserial )