肉の購入を追跡する表を見てください。購入した肉の種類を示す「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にとらわれない回答のみをお願いします。
私はあなたがサブタイプ/スーパータイプの構造を探していると思います。肉は移行キーであり、関連する肉のサブタイプを示すTypeフィールドを含みます。そう:
PurchaseMeat = Meat = {MeatBeef、MeatPork、MeatPoultry}
Meatはサブタイプのタイプとキーです。
クロウの足の表記では、これはその下に線のある円です。
肉の種類ごとに他のテーブルを作成することはありません。肉の種類とカットの種類を作成し、FKを使用してそれらをすべて結び付けます。以下のサンプル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.productsを持つsales.order_linesがあり、productには肉製品を説明する説明フィールドがあります。
PRODUCTIONの肉の詳細が必要な場合は、product.specificationsとして販売DBに送信されます。