Oracle SQL ограничение для проверки данных перед разрешением INSERT - PullRequest
0 голосов
/ 21 марта 2020

вроде новичок в SQL, поэтому нужна помощь здесь. Во-первых, пожалуйста, обратитесь к рисунку для моих таблиц (таблица BED, таблица WARD, таблица PATIENT).

Я использую Oracle SQL Версия разработчика 19.4.0.354 в качестве обучения инструмент.

=============================================== ===========================

РЕДАКТИРОВАТЬ: Итак, я изменил таблицы, как показано ниже:

BED ( BEDNO, BED_OCCUPIEDDATE , WARDNO, PATIENTNO)

ПАЦИЕНТЫ ( PATIENTNO , ПЕРВОЕ ИМЯ, ЛАСТНИЙ, АДРЕС, ГЕНДЕР, ДАТА ОБЪЕДИНЕНИЯ, ФИТОН, МАРИТ , EXPECTEDSTAY, DATEWARDED, EXPECTEDLEAVE, DATELEFT)

WARD ( WARDNO , WARDNAME, LOCATION, NUMBEROFBED, EXTNO)

BedNo является уникальным во всей базе данных. пронумерованы от 1-240. Значение WardA будет иметь bedno 1-10, WardB может иметь bedno 11-20 и т. Д.

Как я могу разрешить размещение пациента в палате, только если есть кровать доступно в палате? Потому что в настоящее время кровати не "помечены" в палате, если вы ссылаетесь на мое ERD.

1 Ответ

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

Немного измените дизайн.

Сначала получите стол палаты.

CREATE TABLE ward
             (wardno ...,
              ...
              PRIMARY KEY (wardno)
              ...);

Затем в таблице кроватей укажите палату, которая посещает эту кровать, но не пациента, который занимает. it.

CREATE TABLE bed
             (bedno ...,
              wardno ...,
              ...
              PRIMARY KEY (bedno),
              FOREIGN KEY (wardno)
                          REFERENCES ward
                                     (wardno),
              ...);

В справочной таблице пациентов кровать, которую занимает пациент. Невозможно сослаться на несуществующую кровать, и без кровати пациент не получает палату. Объявляя рецензируемую кровать уникальной, не более одного пациента могут занимать одну и ту же кровать. Если вы не хотите, чтобы пациенты оставались без кровати, вы можете также указать номер кровати NOT NULL.

CREATE TABLE patient
             (patientno ...,
              ...
              bedno ... NOT NULL,
              PRIMARY KEY (patientno),
              FOREIGN KEY (bedno)
                          REFERENCES bed
                                     (bedno),
              UNIQUE (bedno),
              ...);

И, кстати, вам не следует указывать количество кроватей, которые посещает палата, если это то, что ward.numberofbed должно хранить. Вместо этого вы должны запросить эту цифру, когда это необходимо. Для удобства вы также можете использовать представление, поэтому вам не нужно повторять такой запрос.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...