Как вставить несколько строк для одного первичного ключа? - PullRequest
1 голос
/ 07 апреля 2009

У меня есть таблица с именем Patient_detail. В этой таблице 4 столбца. Это:

  1. patient_id первичный ключ (не ноль)
  2. visit_serial_ID первичный ключ (не ноль)
  3. examination
  4. plan

Теперь, как я могу вставить несколько записей в столбцы «обследование» и «план» относительно одного первичного ключа «Patient_id» и «visit_serial_ID» таблицы «Patient_detail»?

Типы полей следующие:

  • patient_id: номер (11)
  • visit_serial_ID: номер (5)
  • examination: varchar2 (50)
  • plan: varchar2 (50)

Ответы [ 4 ]

12 голосов
/ 07 апреля 2009

Вы не можете (это весь смысл первичного ключа - у вас есть одна строка на значение). Вы должны разделить это на пару таблиц, одну для посещений и одну для пациентов. Таблица посещений будет иметь отношение внешнего ключа к столбцу первичного ключа таблицы пациента.

EDIT

Вам нужно подумать о том, какие реальные реальные вещи вы представляете и как они взаимосвязаны. Для каждой отдельной вещи в реальной жизни у вас обычно есть отдельная таблица. Это позволяет вам иметь отношения один к одному, многие к одному, многие ко многим, которые вы ищете. Например, вы представляете пациента, у которого есть визит, во время которого проводится ряд обследований, каждое из которых имеет соответствующий план (это правильно?). Поэтому у вас должна быть таблица пациента, содержащая данные пациента, таблица посещения, содержащая данные посещения, и таблица исследования, содержащая данные обследования, и, возможно, даже таблица плана, содержащая данные плана.

Таблица посещений имеет отношение один к одному с таблицей пациентов (пациент может посещать несколько раз) Для этого у него должен быть внешний ключ к столбцу Patient_id. Аналогично, таблица проверки имеет отношение «многие к одному» с таблицей посещений, поэтому, опять же, она должна иметь внешний ключ к первичному ключу таблицы посещений.

Существуют и другие способы отделения. Как сказал Саша, посмотри на нормализацию.

4 голосов
/ 07 апреля 2009

Вы можете сделать это, но ваш первичный ключ перестанет быть первичным ключом, а ваши данные будут денормализованы. Лучший способ сделать это - разделить эту таблицу на две отдельные таблицы, например так:

Patients
----------
PatientId

Visits
----------
VisitSerialId
Examination
Pland
PatientId

Обратите внимание, что таблица Visits имеет отношение внешнего ключа к таблице Patients. Это позволит вам иметь отношения 1:M, которые вы ищете.

1 голос
/ 07 апреля 2009

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

0 голосов
/ 07 апреля 2009

Как сказал Дарасд, ты не можешь. То, что вы ищете, это нормализация вызовов.

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