Два Родителя Стол Один Детский Стол Отношения - PullRequest
0 голосов
/ 19 января 2020
PurchaseMaster

InvNo       varchar(50) (PK)
InvDate     DateTime
NetAmount   decimal(18,2)


PurchaseDetail

InvNo       varchar(50) (FK)
InvDate     DateTime
Quantity    decimal(18,2)
Rate        decimal(18,2)
Amount      decimal(18,2)

*** Отношения PK-FK = PurchaseMaster.InvNo => PurchaseDetail.InvNo

SaleMaster

InvNo       varchar(50) (PK)
InvDate     DateTime
NetAmount   decimal(18,2)

SaleDetail

InvNo       varchar(50) (FK)
InvDate     DateTime
Quantity    decimal(18,2)
Rate        decimal(18,2)
Amount      decimal(18,2)

*** Отношения PK-FK = SaleMaster.InvNo => SaleDetail.InvNo

StockDetail

InvNo       Varchar(50)
InvDate     DateTime
Quantity    Decimal(18,2)
Rate        Decimal(18,2)
Amount      Decimal(18,2)
Type        varchar(50) Purchase/Sale   

У меня есть два стола для покупки и два стола для продажи. По некоторым требованиям я должен вести таблицу покупки и продажи отдельно.

Во время покупки я хочу вставить запись в таблицу, как ...

PurchaseMaster
PurchaseDetail
StockDetail

Во время продажи Я хочу вставить запись в таблицу, как ...

SaleMaster
SaleDetail
StockDetail

В обоих случаях я хочу вставить запись в таблицу StockDetail, чтобы сохранить запас.

Но как мне установить отношения primarykey и foreighkey? между BuyDetail, SaleDetail с таблицей StockDetail?

1 Ответ

0 голосов
/ 19 января 2020

Нельзя установить внешний ключ для StockDetail на 2 таблицы, если вы не создадите 2 поля FK.

StockDetail

StockDetail_id                 -- PK  for StockDetail
InvNo_sales       Varchar(50)  -- Foreign Key to sales or null
InvNo_purchase    Varchar(50)  -- Foreign Key to purchase or null
InvDate     DateTime
Quantity    Decimal(18,2)
Rate        Decimal(18,2)
Amount      Decimal(18,2)
Type        varchar(50) Purchase/Sale   

Но правильное решение помещается в одну и ту же таблицу «Продажи и покупки»

InvNo       varchar(50) (PK)
TypeTransaction  int      -- 1 for sale 2 for purchase
InvDate     DateTime
NetAmount   decimal(18,2)

InvNo       varchar(50) (FK)
TypeTransaction  int      -- 1 for sale 2 for purchase
InvDate     DateTime
Quantity    decimal(18,2)
Rate        decimal(18,2)
Amount      decimal(18,2)
...