Frage

Nehmen Sie einen Tisch, der Fleischkäufe verfolgt. Es hat eine "Meat_Id" -Auskey -Spalte, um anzuzeigen, welche Art von Fleisch der Kauf war.

Aber die verschiedenen Fleischarten sind in irgendeiner Weise einzigartig (z. B. USDA -Einstufung), daher denke ich, dass sie in verschiedenen Tischen gespeichert werden sollten.

Ich habe derzeit nicht genug Repräsentanten, um die von mir herausgezogene ERD zu veröffentlichen, aber ich hoffe, diese DDLs werden ausreichen (ich habe sie für die Kürze vereinfacht):

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...

Ich frage mich, wie man den Tisch "Meat_Purchases" mit den Fleischtischen bezieht.

Nur Standard -SQL- und RDBMS Agnostic Antworten, bitte.

War es hilfreich?

Lösung

Ich denke, Sie suchen ein Subtyp/SuperType -Konstrukt. Fleisch wäre Ihr migrierender Schlüssel und würde ein Typfeld enthalten, das angibt, auf welchen Untertyp Fleisch es sich bezieht. So:

KaufaMeat = fleisch = {fleischbeeef, fleischpork, fleischpultry}

Wo Fleisch der Typ und der Schlüssel des Subtyps ist.

In Crows Füße Notation ist dies ein Kreis mit einer Linie darunter.

Andere Tipps

Ich würde keine anderen Tische für die unterschiedliche Art von Fleisch erstellen. Ich würde Fleischtypen erstellen und Typen schneiden und dann mit FKs alle zusammenbinden. Beispiel DB unten:

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

PFERDE FÜR KURSE

Sie versuchen, einer E-Commerce-Lösung mit einer völlig anderen operativen Lösung beizutreten. Was Sie tun müssen, ist, E-Commerce als einen separaten begrenzten Kontext zu betrachten, auch als Abteilung, und daher verfügt sie über eine separate Datenbank.

Abteilung: Verkauf

Abteilung: Fleischproduktion

In diesem Fall hat ein Vertrieb einen Vertrieb. Order_lines mit Verkaufs.produkten und Produkten ein Beschreibung Feld, das das Fleischprodukt beschreibt

Wenn Sie Fleischdetails aus der Produktion benötigen, werden sie an Ihre Verkaufsdb als Produkte gesendet. Spezifikationen

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit dba.stackexchange
scroll top