Domanda

Prendere una tabella che gli acquisti tracce di carne. Ha una colonna chiave esterna "meat_id" per indicare quale tipo di carne l'acquisto è stato.

Ma, i diversi tipi di carne sono uniche in qualche modo (come USDA grading), così sto pensando che devono essere conservati in tabelle differenti.

Attualmente non ho abbastanza rep per pubblicare il disco di ripristino ho disegnato, ma spero che queste DDL saranno abbastanza (io li ho semplificato per brevità):

CREATE TABLE meat_purchase
(
    id                  INTEGER
  , purchase_details    VARCHAR(4000) -- actually multiple columns, but details are irrelevant
  , meat_id             INTEGER
);

CREATE TABLE beef_meats
(
    id                  INTEGER
  , usda_beef_grade_id  INTEGER
        FOREIGN KEY REFERENCES usda_beef_grades
  , desc    VARCHAR(4000)
);

CREATE TABLE pork_meats
(
    id      INTEGER
  , desc    VARCHAR(4000)
);

CREATE TABLE poultry_meats
(
    id      INTEGER
  , bird_id
        FOREIGN KEY REFERENCES birds
  , desc    VARCHAR(4000)
);

-- and so on for the different types of meat...

mi chiedo come mettere in relazione le "meat_purchases" tabella per le tabelle di carni.

standard SQL e RDBMS solo risposte agnostiche, per favore.

È stato utile?

Soluzione

Credo che siete alla ricerca di un costrutto sottotipo / supertipo. Carne sarebbe la chiave di migrazione e conterrebbe un campo Type che indica quale sub-tipo di carne si riferisce a. Quindi:

PurchaseMeat = Carne = {MeatBeef, MeatPork, MeatPoultry}

dove la carne è il tipo e la chiave del sottotipo.

zampe di gallina In notazione questo è un cerchio con una linea sotto di esso.

Altri suggerimenti

Non vorrei creare altri tavoli per i diversi tipi di carni. Vorrei creare tipi di carne e tipi di taglio e quindi utilizzare FKS per legare tutti insieme. DB esempio riportato di seguito:

USE MEAT
CREATE TABLE [dbo].[MeatCut](
[MeatCutID] [int] NOT NULL,
[Description] [varchar](500) NOT NULL,
 CONSTRAINT [PK_MeatCut] PRIMARY KEY CLUSTERED 
(   [MeatCutID] ASC))

GO
CREATE TABLE [dbo].[MeatType](
[MeatTypeid] [int] NOT NULL,
[Description] [varchar](500) NOT NULL,
[usda_beef_grade_id] [int] NOT NULL,
 CONSTRAINT [PK_MeatType] PRIMARY KEY CLUSTERED 
(   [MeatTypeid] ASC))

CREATE TABLE [dbo].[MeatProduct](
[MeatProductID] [int] NOT NULL,
[MeatTypeID] [int] NULL,
[MeatCutID] [int] NULL,
 CONSTRAINT [PK_MeatProduct] PRIMARY KEY CLUSTERED 
(   [MeatProductID] ASC)) 
GO

CREATE TABLE [dbo].[meat_purchase](
[PurchaseID] [int] NOT NULL,
[purchase_details] [varchar](4000) NULL,
[MeatProduct_id] [int] NULL,
CONSTRAINT [PK_meat_purchase] PRIMARY KEY CLUSTERED 
(   [PurchaseID] ASC)) 
GO
ALTER TABLE [dbo].[MeatProduct]  WITH CHECK ADD  CONSTRAINT [FK_MeatProduct_MeatCut] FOREIGN KEY([MeatCutID]) REFERENCES [dbo].MeatCut] ([MeatCutID])
GO
ALTER TABLE [dbo].[MeatProduct] CHECK CONSTRAINT [FK_MeatProduct_MeatCut]
GO
ALTER TABLE [dbo].[MeatProduct]  WITH CHECK ADD  CONSTRAINT [FK_MeatProduct_MeatType] FOREIGN KEY([MeatTypeID])
REFERENCES [dbo].[MeatType] ([MeatTypeid])
GO
ALTER TABLE [dbo].[MeatProduct] CHECK CONSTRAINT [FK_MeatProduct_MeatType]
GO
ALTER TABLE [dbo].[meat_purchase]  WITH CHECK ADD  CONSTRAINT [FK_meat_purchase_MeatProduct] FOREIGN KEY([MeatProduct_id])
REFERENCES [dbo].[MeatProduct] ([MeatProductID])
GO
ALTER TABLE [dbo].[meat_purchase] CHECK CONSTRAINT [FK_meat_purchase_MeatProduct]
GO

cavalli per i corsi

Si sta tentando di unirsi a una soluzione di e-commerce con una soluzione operativa completamente diverso. Quello che dovete fare è pensare a e-commerce come un contesto limitato separata aka un reparto e quindi ha un database separato.

Dipartimento: VENDITE

Dipartimento: CARNI DI PRODUZIONE

In questo caso una sales.order ha sales.order_lines che ha sales.products, e il prodotto ha un campo di descrizione che la descrive il prodotto a base di carne

Se avete bisogno di informazioni a base di carne dalla produzione allora sarebbero inviati verso le vendite DB come product.specifications

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a dba.stackexchange
scroll top