私は製造DBの一部に取り組んでいます。ビジネスはカスタムオーダーを受け取り、仕様に合わせてアイテムを構築します。数種類 (3 ~ 10 としましょう) のオブジェクトのみを作成しますが、オブジェクトの種類ごとに記録される仕様が異なります。いくつかの共通フィールドをリストしたマスター製造テーブル (mfgorders) を作成し、注文したエンティティに固有の仕様テーブルを参照させたいと考えています。これが正しいアプローチであると完全に確信しているわけではありません。実は私も自信がありません。私の他のモデリングはすべて簡単ですが、これは私を悩ませています.
SQLは次のとおりです。
CREATE TABLE dbo.mfgorders (MfgOrderId int NOT NULL
IDENTITY (1, 1) ,
OrderId int NOT NULL,
LineNbr tinyint NOT NULL,
MfgTypeId tinyint NOT NULL,
ItemDescription varchar (999) ,
ManufacturingCost smallmoney,
CONSTRAINT PK_mfgorders PRIMARY KEY (MfgOrderId)) ;
--OrderId + LineNbr are a composite referencing a row on a lineitem table (not depicted here)
CREATE TABLE dbo.mfgorders_entity1 (MfgOrderId int NOT NULL,
EntitySize decimal (5, 3) ,
Width decimal (4, 2) ,
Thickness decimal (4, 2) ,
CONSTRAINT PK_mfgorders_entity1 PRIMARY KEY (MfgOrderId)) ;
CREATE TABLE dbo.mfgorders_entity2 (MfgOrderId int NOT NULL,
Height decimal (5, 2) ,
Width decimal (5, 2) ,
Thickness decimal (4, 2) ,
RotationSetting decimal (4, 1) ,
FinishedHeight decimal (5, 2) ,
FinishedWidth decimal (5, 2) ,
FinishedThickness decimal (4, 2) ,
CONSTRAINT PK_mfgorders_entity2 PRIMARY KEY (MfgOrderId)) ;
CREATE TABLE mfg_types (MfgTypeId tinyint NOT NULL,
ItemName varchar (32) NOT NULL,
ItemDescription nvarchar (64) NULL,
IsActive bit NOT NULL
CONSTRAINT DF_mfg_types_IsActive DEFAULT 1,
SortOrder int NULL,
CONSTRAINT PK_mfg_types PRIMARY KEY (MfgTypeId)) ;
ALTER TABLE dbo.mfgorders_entity1 ADD CONSTRAINT FK_mfgorders_entity1_mfgorders FOREIGN KEY (MfgOrderId) REFERENCES dbo.mfgorders (MfgOrderId) ON UPDATE NO ACTION ON DELETE CASCADE;
ALTER TABLE dbo.mfgorders_entity2 ADD CONSTRAINT FK_mfgorders_entity2_mfgorders FOREIGN KEY (MfgOrderId) REFERENCES dbo.mfgorders (MfgOrderId) ON UPDATE NO ACTION ON DELETE CASCADE;
ALTER TABLE dbo.mfgorders ADD CONSTRAINT FK_mfgorders_mfg_types FOREIGN KEY (MfgTypeId) REFERENCES dbo.mfg_types (MfgTypeId) ON UPDATE NO ACTION ON DELETE CASCADE;
上記のコードのER図は次のとおりです。
このモデルは、entity1 と entity2 が同じ MfgOrderId を持つことができることを意味しますが、もちろんそれは望ましくありません。MfgOrderId が 1 つのエンティティのみを参照するようにします。mfg_types を使用して適切なエンティティ テーブルを指すことを望んでいたと思いますが、モデルがオフになっていると感じており、SO コミュニティに問い合わせて、私の人生に数年余分に追加したいと考えています。
よろしく、ジョン