質問

肉の購入を追跡するテーブルを取ります。 「Meat_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...

「Meat_Purchases」テーブルを肉のテーブルに関連付ける方法を疑問に思っています。

標準的なSQLおよびRDBMS不可知論の答えのみをお願いします。

役に立ちましたか?

解決

サブタイプ/スーパータイプのコンストラクトを探していると思います。肉はあなたの移動鍵であり、それが関連する肉のサブタイプを示すタイプのフィールドを含むでしょう。それで:

purchasemeat = meat = {meatbeef、meatpork、meat poultry}

ここで、肉はサブタイプのタイプであり、キーです。

カラスの足の表記では、これはその下に線がある円です。

他のヒント

私はさまざまな種類の肉のために他のテーブルを作成しません。肉の種類を作成し、タイプをカットし、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

コースのための馬

まったく異なる運用ソリューションを使用して、eコマースソリューションに参加しようとしています。あなたがする必要があるのは、eコマースを別の境界付きコンテキスト、つまり部門として考えることです。したがって、個別のデータベースがあります。

部門:販売

部門:肉生産

この場合、sales.orderにはsales.order_linesがあります。

生産から肉の詳細が必要な場合、それらはあなたの販売dbにdbに送られます。

ライセンス: CC-BY-SA帰属
所属していません dba.stackexchange
scroll top