Pregunta

Tome una tabla que las compras de carne pistas. Tiene una columna "meat_id" clave externa para indicar qué tipo de carne era la compra.

Sin embargo, los diferentes tipos de carne son únicos de alguna manera (por ejemplo, el USDA clasificación), así que estoy pensando que deben ser almacenados en tablas diferentes.

Actualmente no tengo representante suficiente para publicar el ERD saqué, pero espero que estos DDL será suficiente (yo los he simplificado por razones de brevedad):

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

Me pregunto cómo se relacionan los "meat_purchases" mesa para las tablas de carnes.

estándar SQL y RDBMS únicas respuestas agnósticos, por favor.

¿Fue útil?

Solución

creo que busca una construcción subtipo / supertipo. La carne sería la clave de la migración y contendría un campo de tipo que indica qué sub-tipo de carne que se relaciona. Por lo tanto:

PurchaseMeat = de la carne = {MeatBeef, MeatPork, MeatPoultry}

donde la carne es el tipo y la clave del subtipo.

En los pies de Crow notación esto es un círculo con una línea debajo de ella.

Otros consejos

Yo no crear otras tablas para los diferentes tipos de carnes. Me gustaría crear tipos de carne y tipos de corte y luego usar FKs para atarlos todos juntos. DB de muestra a continuación:

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

caballos de carreras

Está intentando unirse a una solución de comercio electrónico con una solución operativa totalmente diferente. Lo que hay que hacer es pensar en el comercio electrónico como un marco acotado por separado también conocido como un departamento y por lo tanto tiene una base de datos independiente.

Departamento: VENTAS

Departamento: PRODUCCIÓN DE CARNE

En este caso un sales.order tiene sales.order_lines que tiene sales.products, y el producto tiene un campo de descripción que la describe el producto de carne

Si necesita detalles de carne desde la producción luego serían enviados a través de sus ventas DB como product.specifications

Licenciado bajo: CC-BY-SA con atribución
No afiliado a dba.stackexchange
scroll top