У меня есть два первичных ключа, как я могу сделать так, чтобы мы не могли использовать ни один из ключей снова - PullRequest
1 голос
/ 18 марта 2020
APPOINTMENT
<PK> PID:                  NUMBER(3,0)
<PK> appointmentDate:      TIMESTAMP
reason_for_visit:          VARCHAR(150)
assigned_Doctor:           REF DOCTOR_ty

Я хотел бы сделать так, чтобы пациент мог записаться только один раз и чтобы время назначения не могло быть противоречивым. Например, если PID = 101, а назначенная дата - 17.03.20 в 15:00. Следующее НЕ МОЖЕТ произойти PID = 102 03/17/20 3:00 PM или PID = 101 03/18/20 PM. Я думаю, что я использую первичные ключи неправильный способ представить эту ситуацию. Ребята, у вас есть предложение go о реализации этой проблемы? Нужно ли создавать отдельную таблицу? Создать функцию-член? потому что моя таблица назначений является объектом, но я еще не достаточно опытен, чтобы написать функцию, однако, если вы это сделаете, пожалуйста, помогите мне реализовать эту ситуацию с помощью функции. -Спасибо

Ответы [ 3 ]

2 голосов
/ 18 марта 2020

Таблица может иметь только один первичный ключ. Но вы можете иметь столько уникальных ключей, сколько захотите.

Таким образом, вы можете сделать один ключ первичным ключом, а другой - уникальный ключ:

create table appointment(
    pid                 number(3, 0) primary key,
    appointment_date    timestamp unique,
    reason_for_visit    varchar2(150),
    ...
)

Эта настройка предотвращает дублирование в столбцы pid и appointment_date.

1 голос
/ 18 марта 2020

Вы можете определить уникальное ограничение для таблицы для нескольких столбцов.

ALTER TABLE APPOINTMENT
ADD CONSTRAINT constraint_name UNIQUE (PID,appointmentDate );

0 голосов
/ 18 марта 2020

Таблица может иметь только один первичный ключ, однако первичный ключ может быть построен из нескольких (до 16) столбцов.

ALTER TABLE APPOINTMENT
ADD CONSTRAINT constraint_name PRIMARY KEY (PID, appointmentDate);
...