Просто укажите на PRIMARY KEY
указанной таблицы:
PO_Table (POId PRIMARY KEY, MainPharmacyID, SupplierID, PreparedBy)
PO_Items_Table (POItemID, POId FOREIGN KEY REFERENCES PO_Table (POId), ...)
На самом деле, в вашем PO_Table
я не вижу другого ключа-кандидата, кроме POId
, так что на данный момент это единственное доступное для меня решение.
Какие "два варианта" вы рассматриваете?
Обновление:
Поместить POItemID
в PO_Table
нельзя, если только вы не хотите, чтобы в ваших заказах было не более одного элемента.
Просто посмотрите на это: если у вас есть только один столбец, в котором хранится id
заказанного товара в таблице заказов, где вы будете хранить другие предметы?
Обновление 2:
Если существует отношение один к одному, обычно вы просто объединяете таблицы: объединяете все поля из обеих таблиц в одну запись.
Однако бывают случаи, когда вам нужно разделить таблицы. Скажем, одна из сущностей редко определяется, но имеет слишком много полей.
В этом случае вы создаете отдельное отношение для второго объекта и делаете его столбец PRIMARY KEY также FOREIGN KEY
.
Давайте представим модель, которая описывает замки и ключи, и ключи не могут быть продублированы (поэтому один замок соответствует не более одного ключа и наоборот):
Pairs (PairID PRIMARY KEY, LockID UNIQUE, LockProductionDate, KeyId UNIQUE, KeyProductionDate)
Если для ключа нет ключа или нет ключа для ключа, мы просто помещаем NULLS
в соответствующие поля.
Однако, если все ключи имеют блокировку, но ключи имеют только несколько замков, мы можем разделить таблицу:
Locks (LockID PRIMARY KEY, LockProductionDate, KeyID UNIQUE)
Keys (KeyID PRIMARY KEY, KeyProductionDate, FOREIGN KEY (KeyID) REFERENCES Locks (KeyID))
Как видите, KeyID
- это PRIMARY KEY
и FOREIGN KEY
в таблице Keys
.
Вы можете прочитать эту статью в моем блоге:
, который описывает некоторые способы отображения модели ER
(сущности и отношения) в реляционную модель (таблицы и внешние ключи)