-1

假设

库存表包含:
STOCK_ID
STOCK_QTY

组件表包含:
COMPONENT_ID
COMPONENT_QTY
STOCK_ID (FK)

三明治表包含:
SANDWICH_ID
SANDWICH_PRICE
COMPONENT_ID(FK)

我有三个三明治,培根,香肠和培根和香肠。STOCK_QTY 包含整个商店的库存数量。COMPONENT_ID 包含每个三明治使用的组件数量。

现在我遇到的问题是每个三明治我需要多个组件(制作一个完整的三明治,即面包、黄油、香肠),这些组件又将从总库存量(面包 200、黄油 200、香肠 300)中删除在组件数量字段中指定的值(面包 2,黄油 1 香肠 2)。我无法弄清楚如何设计/实现它。为什么/如何将多个分配COMPONENT_IDs给 aSANDWICH_ID还是我要解决这一切都错了?

表格

MSD_COMPONENT:

COMPONENT_ID        VARCHAR2(8)     No       -       1
COMPONENT_TYPE      VARCHAR2(8)     Yes      -       -
COMPONENT_QTY       NUMBER          Yes      -       -
COMPONENT_DECSR     VARCHAR2(25)    Yes      -       -
STOCK_ID            VARCHAR2(8)     Yes      -       -


COMPONENT_ID  COMPONENT_TYPE  COMPONENT_QTY  COMPONENT_DECSR     STOCK_ID
  CID0001        BREAD            2          WHITE BREAD SLICES   SID0001
  CID0002        BREAD            2          BROWN BREAD SLICES   SID0002
  CID0003        BREAD            1          WHITE BREAD BAP      SID0003
  CID0004        BREAD            1          BROWN BREAD BAP      SID0004
  CID0005        BREAD            2          WHOLEMEAL SLICES     SID0005
  CID0015        MEAT           200          BACON RASHERS        SID0006
  CID0006        BREAD            1          WHOLEMEAL BAPS       SID0007
  CID0007        VEG            100          TOMATOES             SID0008
  CID0008        VEG             15          ONIONS               SID0009
  CID0009        VEG             40          PEPPERS              SID0010
  CID0010        VEG             25          CARROTS              SID0011
  CID0011        MEAT            50          BEEF                 SID0012
  CID0012        MEAT           100          CHICKEN BREAST       SID0013
  CID0013        MEAT            50          HAM                  SID0014
  CID0014        MEAT           100          PORK SAUSAGE         SID0015

MSD_三明治:

SANDWICH_ID         VARCHAR2(8)     No       -       1
SANDWHICH_TYPE      VARCHAR2(8)     Yes      -       -
SANDWICH_DESCRIP    VARCHAR2(20)    Yes      -       -
SANDWICH_PRICE      VARCHAR2(8)     Yes      -       -
COMPONENT_ID        VARCHAR2(8)     Yes      -       -

MSD_STOCK:

STOCK_ID    VARCHAR2(8)     No       -       1
STOCK_TYPE  VARCHAR2(15)    Yes      -       -
SHOP_ID     VARCHAR2(6)     Yes      -       -
STOCK_QTY   NUMBER          No       -       -
4

1 回答 1

0

花了一些时间阅读您的问题...

如何将多个 COMPONENT_ID 分配给 SANDWICH_ID

这看起来像是典型的一对多关系。这通常可以通过添加第三个“关系”表来完成:

MSD_食谱:

SANDWICH_ID (FK) COMPONENT_ID (FK)
  SID0001          CID0001
  SID0001          CID0015
  SID0001          CID0007 /* white sandwich made with bacon and tomato */
  SID0002          CID0002
  SID0002          CID0013
  SID0002          CID0008 /* brown sandwich made with ham and onion */

,

既然您有一个关系表 RECIPE,您不必在 COMPONENT 中“修复”数量(从技术上讲,我认为这在逻辑上是不正确的),而是可以将数量移动到 RECIPE 以使事情更灵活:

MSD_INGREDIENTS(替换 MSD_COMPONENT):

INGREDIENT_ID  INGREDIENT_TYPE  INGREDIENT_DECSR     STOCK_ID
  CID0001        BREAD          WHITE BREAD SLICES   SID0001
  CID0002        BREAD          BROWN BREAD SLICES   SID0002
  CID0005        BREAD          WHOLEMEAL SLICES     SID0005
  CID0015        MEAT           BACON RASHERS        SID0006
  CID0006        BREAD          WHOLEMEAL BAPS       SID0007
  CID0007        VEG            TOMATOES             SID0008
  CID0008        VEG            ONIONS               SID0009
  CID0010        VEG            CARROTS              SID0011
  CID0013        MEAT           HAM                  SID0014

MSD_食谱:

SANDWICH_ID (FK)  INGREDIENT_ID (FK)  QUANTITY
  SID0001           CID0001             2
  SID0001           CID0015             200
  SID0001           CID0007             100 /* old white sandwich */
  SID0003           CID0002             2   /* two brown bread */
  SID0003           CID0005             1   /* one wholeweat bread */
  SID0003           CID0013             100 /* one ham */
  SID0003           CID0015             100 /* one bacon */
  SID0003           CID0008             30  /* new 2-level sandwich! */
于 2013-05-07T11:20:07.633 回答