Question

Prenez une table que les pistes d'achats de viande. Il a une « meat_id » colonne de clé étrangère pour indiquer quel type de viande l'achat était.

Mais, les différents types de viande sont uniques d'une certaine façon (comme le classement USDA), donc je pense qu'ils doivent être stockés dans des tables différentes.

Je n'avons assez pour poster représentant l'ERD je dessinais, mais j'espère que ces DDLs seront assez (je les ai simplifié par souci de concision):

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

Je me demande comment relier la table "meat_purchases" aux tables de viandes.

Standard réponses SQL et SGBDR agnostique seulement, s'il vous plaît.

Était-ce utile?

La solution

Je pense que vous êtes à la recherche d'un sous-type construction / supertype. La viande serait votre clé et la migration contiendrait un champ de type qui indique quel sous-type de viande, il se rapporte. Donc:

= PurchaseMeat viande = {MeatBeef, MeatPork, MeatPoultry}

Lorsque la viande est le type et la clé du sous-type.

notation pieds de ce Dans Crow est un cercle avec une ligne en dessous.

Autres conseils

Je ne pas créer d'autres tables pour les différents types de viandes. Je voudrais créer des types de viande et les types de coupe, puis utiliser pour les attacher FKs tous ensemble. Exemple de DB ci-dessous:

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

COURS POUR CHEVAUX

Vous essayez de joindre une solution e-commerce avec une solution opérationnelle tout à fait différente. Ce que vous devez faire est de penser le commerce électronique comme un contexte distinct alias délimité un département et donc il a une base de données séparée.

Département: CHIFFRE D'AFFAIRES

Département: PRODUCTION DE VIANDE

Dans ce cas, un sales.order a sales.order_lines qui a sales.products, et le produit a un champ de description que le décrit le produit de viande

Si vous avez besoin de détails de la viande de la production, ils seraient alors envoyés vers vos ventes DB comme product.specifications

Licencié sous: CC-BY-SA avec attribution
Non affilié à dba.stackexchange
scroll top