拿一张可以追踪肉类购买的桌子。它具有“肉_id”外键柱,以指示购买的肉类是什么类型。

但是,不同类型的肉在某种程度上是独一无二的(例如USDA分级),因此我认为它们应该存储在不同的桌子中。

目前,我没有足够的代表来发布我抽出的ERD,但我希望这些DDL会足够(我简短地简化了它们):

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

我想知道如何将“肉食”桌子与肉桌相关联。

请仅标准SQL和RDBMS不可知论答案。

有帮助吗?

解决方案

我认为您正在寻找亚型/超级型结构。肉将是您的迁移钥匙,并包含一个类型的字段,该字段指示其与哪种肉类相关的肉类。所以:

puphasemeat =肉= {肉贝,肉馅饼,肉池}

肉是亚型的类型和钥匙。

在乌鸦的脚符号中,这是一个圆圈,下面有一条线。

其他提示

我不会为不同种类的肉创建其他桌子。我会创建肉类类型和切割类型,然后使用FKS将它们全部绑在一起。下面的样本DB:

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

马的马

您正在尝试使用完全不同的操作解决方案加入电子商务解决方案。您需要做的是将电子商务视为一个单独的有限上下文,也就是一个部门,因此它具有单独的数据库。

部门:销售

部门:肉类生产

在这种情况下

如果您需要生产中的肉类细节,则将它们作为产品发送到您的销售数据库。

许可以下: CC-BY-SA归因
不隶属于 dba.stackexchange
scroll top