В вашем коде много ошибок, наиболее выдающимися из которых являются:
- пропущенные запятые в конце строк
- искаженный
PRIMARY KEY
ограничение - опечатки:
VARCHAR2(1O)
вместо VARCHAR2(10)
Рассмотрим следующее утверждение, которое отлично работает в в этой скрипте БД :
CREATE TABLE sangre(
id_pruebas VARCHAR2(10),
CONSTRAINT san_id_pruebas_pk PRIMARY KEY(id_pruebas),
tipo VARCHAR2(5) NOT NULL,
CONSTRAINT san_tipo_pruebas
CHECK (tipo IN ('O-', 'O+', 'A-', 'A+', 'B-', 'B+', 'AB-', 'AB+')),
fecha DATE NOT NULL,
id_sal VARCHAR2(10) NOT NULL,
id_paciente NUMBER(8) NOT NULL,
CONSTRAINT san_id_paciente_ck
CHECK (id_paciente >= 0),
id_enfermero VARCHAR2(10) NOT NULL,
CONSTRAINT san_id_enfermero_fk
FOREIGN KEY (id_enfermero) REFERENCES enfermero (id_enfermero),
CONSTRAINT san_id_paciente_fk
FOREIGN KEY (id_paciente) REFERENCES paciente(id_paciente),
CONSTRAINT san_tipo_pruebas_pk
FOREIGN KEY (id_sal) REFERENCES laboratorio(id_sal)
);
Примите также к сведению, что я упростил ограничение CHECK
для tipo
, используя IN
вместо OR
ed условий.
Кроме того, вы можете рассмотреть следующий синтаксис, который сокращает код путем встраивания внешних ключей и проверки ограничений (единственный недостаток состоит в том, что вы не можете выбрать имя ограничений):
CREATE TABLE sangre(
id_pruebas VARCHAR2(10) PRIMARY KEY,
tipo VARCHAR2(5) NOT NULL
CHECK (tipo IN ('O-', 'O+', 'A-', 'A+', 'B-', 'B+', 'AB-', 'AB+')),
fecha DATE NOT NULL,
id_sal VARCHAR2(10) NOT NULL
REFERENCES laboratorio(id_sal),
id_paciente NUMBER(8) NOT NULL
CHECK (id_paciente >= 0)
REFERENCES paciente(id_paciente),
id_enfermero VARCHAR2(10) NOT NULL
REFERENCES enfermero (id_enfermero)
);
Демонстрация на DB Fiddle