Skip to content

Commit 7b53cf3

Browse files
authored
Merge pull request #1439 from lbelos/claude/mssql-futon-shop-db-011CUvKoqpR1pTdmPMZVZiyx
Claude/mssql futon shop db 011 c uv koqp r1p tdm pmzv ziyx
2 parents b1ff6e6 + 0152dc1 commit 7b53cf3

9 files changed

Lines changed: 4922 additions & 0 deletions
Lines changed: 369 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,369 @@
1+
-- =============================================
2+
-- Futon Manufacturing Database Schema
3+
-- =============================================
4+
-- This database manages a futon manufacturing business with multi-level
5+
-- bill of materials, inventory, production, and sales tracking.
6+
-- =============================================
7+
8+
USE master;
9+
GO
10+
11+
-- Drop database if exists
12+
IF EXISTS (SELECT name FROM sys.databases WHERE name = N'FutonManufacturing')
13+
BEGIN
14+
ALTER DATABASE FutonManufacturing SET SINGLE_USER WITH ROLLBACK IMMEDIATE;
15+
DROP DATABASE FutonManufacturing;
16+
END
17+
GO
18+
19+
CREATE DATABASE FutonManufacturing;
20+
GO
21+
22+
USE FutonManufacturing;
23+
GO
24+
25+
-- =============================================
26+
-- Reference Tables
27+
-- =============================================
28+
29+
-- Unit of Measure
30+
CREATE TABLE UnitOfMeasure (
31+
UnitID INT IDENTITY(1,1) PRIMARY KEY,
32+
UnitCode NVARCHAR(10) NOT NULL UNIQUE,
33+
UnitName NVARCHAR(50) NOT NULL,
34+
Description NVARCHAR(255)
35+
);
36+
37+
-- Item Types (Raw Material, Component, Finished Good)
38+
CREATE TABLE ItemType (
39+
ItemTypeID INT IDENTITY(1,1) PRIMARY KEY,
40+
TypeCode NVARCHAR(20) NOT NULL UNIQUE,
41+
TypeName NVARCHAR(100) NOT NULL,
42+
Description NVARCHAR(255)
43+
);
44+
45+
-- =============================================
46+
-- Items Master Table
47+
-- =============================================
48+
49+
CREATE TABLE Items (
50+
ItemID INT IDENTITY(1,1) PRIMARY KEY,
51+
ItemCode NVARCHAR(50) NOT NULL UNIQUE,
52+
ItemName NVARCHAR(255) NOT NULL,
53+
ItemTypeID INT NOT NULL,
54+
UnitID INT NOT NULL,
55+
Description NVARCHAR(MAX),
56+
StandardCost DECIMAL(18,4) NOT NULL DEFAULT 0,
57+
ListPrice DECIMAL(18,4) NOT NULL DEFAULT 0,
58+
IsActive BIT NOT NULL DEFAULT 1,
59+
LeadTimeDays INT DEFAULT 0,
60+
ReorderPoint DECIMAL(18,2) DEFAULT 0,
61+
SafetyStock DECIMAL(18,2) DEFAULT 0,
62+
CreatedDate DATETIME2 DEFAULT GETDATE(),
63+
ModifiedDate DATETIME2 DEFAULT GETDATE(),
64+
CONSTRAINT FK_Items_ItemType FOREIGN KEY (ItemTypeID) REFERENCES ItemType(ItemTypeID),
65+
CONSTRAINT FK_Items_UnitOfMeasure FOREIGN KEY (UnitID) REFERENCES UnitOfMeasure(UnitID)
66+
);
67+
68+
-- =============================================
69+
-- Bill of Materials (Multi-Level)
70+
-- =============================================
71+
72+
CREATE TABLE BillOfMaterials (
73+
BOMID INT IDENTITY(1,1) PRIMARY KEY,
74+
ParentItemID INT NOT NULL,
75+
ComponentItemID INT NOT NULL,
76+
Quantity DECIMAL(18,4) NOT NULL,
77+
UnitID INT NOT NULL,
78+
ScrapRate DECIMAL(5,2) DEFAULT 0, -- Percentage
79+
EffectiveDate DATE DEFAULT CAST(GETDATE() AS DATE),
80+
EndDate DATE NULL,
81+
BOMLevel INT NOT NULL DEFAULT 0, -- 0 = top level, increases for sub-components
82+
IsActive BIT NOT NULL DEFAULT 1,
83+
Notes NVARCHAR(MAX),
84+
CreatedDate DATETIME2 DEFAULT GETDATE(),
85+
ModifiedDate DATETIME2 DEFAULT GETDATE(),
86+
CONSTRAINT FK_BOM_ParentItem FOREIGN KEY (ParentItemID) REFERENCES Items(ItemID),
87+
CONSTRAINT FK_BOM_ComponentItem FOREIGN KEY (ComponentItemID) REFERENCES Items(ItemID),
88+
CONSTRAINT FK_BOM_Unit FOREIGN KEY (UnitID) REFERENCES UnitOfMeasure(UnitID),
89+
CONSTRAINT CHK_BOM_NotSelf CHECK (ParentItemID <> ComponentItemID)
90+
);
91+
92+
-- Index for BOM queries
93+
CREATE NONCLUSTERED INDEX IX_BOM_Parent ON BillOfMaterials(ParentItemID) INCLUDE (ComponentItemID, Quantity);
94+
CREATE NONCLUSTERED INDEX IX_BOM_Component ON BillOfMaterials(ComponentItemID);
95+
96+
-- =============================================
97+
-- Inventory Management
98+
-- =============================================
99+
100+
CREATE TABLE Warehouse (
101+
WarehouseID INT IDENTITY(1,1) PRIMARY KEY,
102+
WarehouseCode NVARCHAR(20) NOT NULL UNIQUE,
103+
WarehouseName NVARCHAR(100) NOT NULL,
104+
Address NVARCHAR(255),
105+
City NVARCHAR(100),
106+
State NVARCHAR(50),
107+
ZipCode NVARCHAR(20),
108+
IsActive BIT NOT NULL DEFAULT 1
109+
);
110+
111+
CREATE TABLE Inventory (
112+
InventoryID INT IDENTITY(1,1) PRIMARY KEY,
113+
ItemID INT NOT NULL,
114+
WarehouseID INT NOT NULL,
115+
QuantityOnHand DECIMAL(18,2) NOT NULL DEFAULT 0,
116+
QuantityAllocated DECIMAL(18,2) NOT NULL DEFAULT 0,
117+
QuantityAvailable AS (QuantityOnHand - QuantityAllocated) PERSISTED,
118+
LastCountDate DATETIME2,
119+
LastUpdated DATETIME2 DEFAULT GETDATE(),
120+
CONSTRAINT FK_Inventory_Item FOREIGN KEY (ItemID) REFERENCES Items(ItemID),
121+
CONSTRAINT FK_Inventory_Warehouse FOREIGN KEY (WarehouseID) REFERENCES Warehouse(WarehouseID),
122+
CONSTRAINT UQ_Inventory_Item_Warehouse UNIQUE (ItemID, WarehouseID)
123+
);
124+
125+
CREATE TABLE TransactionType (
126+
TransactionTypeID INT IDENTITY(1,1) PRIMARY KEY,
127+
TypeCode NVARCHAR(20) NOT NULL UNIQUE,
128+
TypeName NVARCHAR(100) NOT NULL,
129+
Description NVARCHAR(255)
130+
);
131+
132+
CREATE TABLE InventoryTransaction (
133+
TransactionID INT IDENTITY(1,1) PRIMARY KEY,
134+
ItemID INT NOT NULL,
135+
WarehouseID INT NOT NULL,
136+
TransactionTypeID INT NOT NULL,
137+
Quantity DECIMAL(18,2) NOT NULL,
138+
UnitCost DECIMAL(18,4),
139+
ReferenceNumber NVARCHAR(50),
140+
ReferenceType NVARCHAR(50), -- PO, SO, WO, ADJ, etc.
141+
Notes NVARCHAR(MAX),
142+
TransactionDate DATETIME2 DEFAULT GETDATE(),
143+
CreatedBy NVARCHAR(100),
144+
CONSTRAINT FK_InvTrans_Item FOREIGN KEY (ItemID) REFERENCES Items(ItemID),
145+
CONSTRAINT FK_InvTrans_Warehouse FOREIGN KEY (WarehouseID) REFERENCES Warehouse(WarehouseID),
146+
CONSTRAINT FK_InvTrans_Type FOREIGN KEY (TransactionTypeID) REFERENCES TransactionType(TransactionTypeID)
147+
);
148+
149+
CREATE NONCLUSTERED INDEX IX_InvTrans_Date ON InventoryTransaction(TransactionDate DESC);
150+
CREATE NONCLUSTERED INDEX IX_InvTrans_Item ON InventoryTransaction(ItemID, TransactionDate);
151+
152+
-- =============================================
153+
-- Supplier Management
154+
-- =============================================
155+
156+
CREATE TABLE Supplier (
157+
SupplierID INT IDENTITY(1,1) PRIMARY KEY,
158+
SupplierCode NVARCHAR(20) NOT NULL UNIQUE,
159+
SupplierName NVARCHAR(255) NOT NULL,
160+
ContactName NVARCHAR(100),
161+
Email NVARCHAR(100),
162+
Phone NVARCHAR(20),
163+
Address NVARCHAR(255),
164+
City NVARCHAR(100),
165+
State NVARCHAR(50),
166+
ZipCode NVARCHAR(20),
167+
Country NVARCHAR(50),
168+
PaymentTerms NVARCHAR(50),
169+
Rating DECIMAL(3,2), -- 0.00 to 5.00
170+
IsActive BIT NOT NULL DEFAULT 1,
171+
CreatedDate DATETIME2 DEFAULT GETDATE()
172+
);
173+
174+
CREATE TABLE SupplierItem (
175+
SupplierItemID INT IDENTITY(1,1) PRIMARY KEY,
176+
SupplierID INT NOT NULL,
177+
ItemID INT NOT NULL,
178+
SupplierPartNumber NVARCHAR(50),
179+
UnitPrice DECIMAL(18,4) NOT NULL,
180+
MinimumOrderQuantity DECIMAL(18,2) DEFAULT 1,
181+
LeadTimeDays INT DEFAULT 0,
182+
IsPreferred BIT NOT NULL DEFAULT 0,
183+
EffectiveDate DATE DEFAULT CAST(GETDATE() AS DATE),
184+
EndDate DATE NULL,
185+
CONSTRAINT FK_SupplierItem_Supplier FOREIGN KEY (SupplierID) REFERENCES Supplier(SupplierID),
186+
CONSTRAINT FK_SupplierItem_Item FOREIGN KEY (ItemID) REFERENCES Items(ItemID)
187+
);
188+
189+
CREATE TABLE PurchaseOrder (
190+
PurchaseOrderID INT IDENTITY(1,1) PRIMARY KEY,
191+
PONumber NVARCHAR(50) NOT NULL UNIQUE,
192+
SupplierID INT NOT NULL,
193+
WarehouseID INT NOT NULL,
194+
OrderDate DATE NOT NULL DEFAULT CAST(GETDATE() AS DATE),
195+
ExpectedDeliveryDate DATE,
196+
ActualDeliveryDate DATE,
197+
Status NVARCHAR(20) NOT NULL DEFAULT 'Draft', -- Draft, Submitted, Confirmed, Shipped, Received, Cancelled
198+
Subtotal DECIMAL(18,2) DEFAULT 0,
199+
TaxAmount DECIMAL(18,2) DEFAULT 0,
200+
ShippingAmount DECIMAL(18,2) DEFAULT 0,
201+
TotalAmount DECIMAL(18,2) DEFAULT 0,
202+
Notes NVARCHAR(MAX),
203+
CreatedBy NVARCHAR(100),
204+
CreatedDate DATETIME2 DEFAULT GETDATE(),
205+
ModifiedDate DATETIME2 DEFAULT GETDATE(),
206+
CONSTRAINT FK_PO_Supplier FOREIGN KEY (SupplierID) REFERENCES Supplier(SupplierID),
207+
CONSTRAINT FK_PO_Warehouse FOREIGN KEY (WarehouseID) REFERENCES Warehouse(WarehouseID)
208+
);
209+
210+
CREATE TABLE PurchaseOrderDetail (
211+
PODetailID INT IDENTITY(1,1) PRIMARY KEY,
212+
PurchaseOrderID INT NOT NULL,
213+
LineNumber INT NOT NULL,
214+
ItemID INT NOT NULL,
215+
Quantity DECIMAL(18,2) NOT NULL,
216+
UnitPrice DECIMAL(18,4) NOT NULL,
217+
QuantityReceived DECIMAL(18,2) DEFAULT 0,
218+
LineTotal AS (Quantity * UnitPrice) PERSISTED,
219+
CONSTRAINT FK_PODetail_PO FOREIGN KEY (PurchaseOrderID) REFERENCES PurchaseOrder(PurchaseOrderID),
220+
CONSTRAINT FK_PODetail_Item FOREIGN KEY (ItemID) REFERENCES Items(ItemID)
221+
);
222+
223+
-- =============================================
224+
-- Production Management
225+
-- =============================================
226+
227+
CREATE TABLE WorkCenter (
228+
WorkCenterID INT IDENTITY(1,1) PRIMARY KEY,
229+
WorkCenterCode NVARCHAR(20) NOT NULL UNIQUE,
230+
WorkCenterName NVARCHAR(100) NOT NULL,
231+
Description NVARCHAR(255),
232+
Capacity DECIMAL(18,2), -- Units per day
233+
IsActive BIT NOT NULL DEFAULT 1
234+
);
235+
236+
CREATE TABLE ProductionOrder (
237+
ProductionOrderID INT IDENTITY(1,1) PRIMARY KEY,
238+
WorkOrderNumber NVARCHAR(50) NOT NULL UNIQUE,
239+
ItemID INT NOT NULL, -- What we're producing
240+
WarehouseID INT NOT NULL,
241+
WorkCenterID INT,
242+
OrderQuantity DECIMAL(18,2) NOT NULL,
243+
QuantityCompleted DECIMAL(18,2) DEFAULT 0,
244+
QuantityScrapped DECIMAL(18,2) DEFAULT 0,
245+
StartDate DATE,
246+
PlannedCompletionDate DATE,
247+
ActualCompletionDate DATE,
248+
Status NVARCHAR(20) NOT NULL DEFAULT 'Planned', -- Planned, Released, InProgress, Completed, Cancelled
249+
Priority INT DEFAULT 5, -- 1 = Highest, 10 = Lowest
250+
Notes NVARCHAR(MAX),
251+
CreatedBy NVARCHAR(100),
252+
CreatedDate DATETIME2 DEFAULT GETDATE(),
253+
ModifiedDate DATETIME2 DEFAULT GETDATE(),
254+
CONSTRAINT FK_ProdOrder_Item FOREIGN KEY (ItemID) REFERENCES Items(ItemID),
255+
CONSTRAINT FK_ProdOrder_Warehouse FOREIGN KEY (WarehouseID) REFERENCES Warehouse(WarehouseID),
256+
CONSTRAINT FK_ProdOrder_WorkCenter FOREIGN KEY (WorkCenterID) REFERENCES WorkCenter(WorkCenterID)
257+
);
258+
259+
CREATE TABLE ProductionOrderMaterial (
260+
ProdOrderMaterialID INT IDENTITY(1,1) PRIMARY KEY,
261+
ProductionOrderID INT NOT NULL,
262+
ItemID INT NOT NULL,
263+
RequiredQuantity DECIMAL(18,2) NOT NULL,
264+
IssuedQuantity DECIMAL(18,2) DEFAULT 0,
265+
CONSTRAINT FK_ProdMaterial_ProdOrder FOREIGN KEY (ProductionOrderID) REFERENCES ProductionOrder(ProductionOrderID),
266+
CONSTRAINT FK_ProdMaterial_Item FOREIGN KEY (ItemID) REFERENCES Items(ItemID)
267+
);
268+
269+
CREATE TABLE ProductionCompletion (
270+
CompletionID INT IDENTITY(1,1) PRIMARY KEY,
271+
ProductionOrderID INT NOT NULL,
272+
QuantityCompleted DECIMAL(18,2) NOT NULL,
273+
QuantityScrapped DECIMAL(18,2) DEFAULT 0,
274+
CompletionDate DATETIME2 DEFAULT GETDATE(),
275+
WorkCenterID INT,
276+
Notes NVARCHAR(MAX),
277+
CompletedBy NVARCHAR(100),
278+
CONSTRAINT FK_Completion_ProdOrder FOREIGN KEY (ProductionOrderID) REFERENCES ProductionOrder(ProductionOrderID),
279+
CONSTRAINT FK_Completion_WorkCenter FOREIGN KEY (WorkCenterID) REFERENCES WorkCenter(WorkCenterID)
280+
);
281+
282+
-- =============================================
283+
-- Quality Control
284+
-- =============================================
285+
286+
CREATE TABLE QualityInspection (
287+
InspectionID INT IDENTITY(1,1) PRIMARY KEY,
288+
ItemID INT NOT NULL,
289+
InspectionType NVARCHAR(50) NOT NULL, -- Incoming, In-Process, Final
290+
ReferenceType NVARCHAR(50), -- PO, WO, etc.
291+
ReferenceNumber NVARCHAR(50),
292+
QuantityInspected DECIMAL(18,2) NOT NULL,
293+
QuantityAccepted DECIMAL(18,2) NOT NULL,
294+
QuantityRejected DECIMAL(18,2) NOT NULL,
295+
InspectionDate DATETIME2 DEFAULT GETDATE(),
296+
InspectedBy NVARCHAR(100),
297+
Notes NVARCHAR(MAX),
298+
CONSTRAINT FK_Quality_Item FOREIGN KEY (ItemID) REFERENCES Items(ItemID)
299+
);
300+
301+
-- =============================================
302+
-- Customer and Sales Management
303+
-- =============================================
304+
305+
CREATE TABLE Customer (
306+
CustomerID INT IDENTITY(1,1) PRIMARY KEY,
307+
CustomerCode NVARCHAR(20) NOT NULL UNIQUE,
308+
CustomerName NVARCHAR(255) NOT NULL,
309+
ContactName NVARCHAR(100),
310+
Email NVARCHAR(100),
311+
Phone NVARCHAR(20),
312+
Address NVARCHAR(255),
313+
City NVARCHAR(100),
314+
State NVARCHAR(50),
315+
ZipCode NVARCHAR(20),
316+
Country NVARCHAR(50),
317+
CreditLimit DECIMAL(18,2),
318+
IsActive BIT NOT NULL DEFAULT 1,
319+
CreatedDate DATETIME2 DEFAULT GETDATE()
320+
);
321+
322+
CREATE TABLE SalesOrder (
323+
SalesOrderID INT IDENTITY(1,1) PRIMARY KEY,
324+
OrderNumber NVARCHAR(50) NOT NULL UNIQUE,
325+
CustomerID INT NOT NULL,
326+
WarehouseID INT NOT NULL,
327+
OrderDate DATE NOT NULL DEFAULT CAST(GETDATE() AS DATE),
328+
RequestedDeliveryDate DATE,
329+
ShipDate DATE,
330+
Status NVARCHAR(20) NOT NULL DEFAULT 'Draft', -- Draft, Confirmed, InProduction, Shipped, Delivered, Cancelled
331+
Subtotal DECIMAL(18,2) DEFAULT 0,
332+
TaxAmount DECIMAL(18,2) DEFAULT 0,
333+
ShippingAmount DECIMAL(18,2) DEFAULT 0,
334+
TotalAmount DECIMAL(18,2) DEFAULT 0,
335+
Notes NVARCHAR(MAX),
336+
CreatedBy NVARCHAR(100),
337+
CreatedDate DATETIME2 DEFAULT GETDATE(),
338+
ModifiedDate DATETIME2 DEFAULT GETDATE(),
339+
CONSTRAINT FK_SO_Customer FOREIGN KEY (CustomerID) REFERENCES Customer(CustomerID),
340+
CONSTRAINT FK_SO_Warehouse FOREIGN KEY (WarehouseID) REFERENCES Warehouse(WarehouseID)
341+
);
342+
343+
CREATE TABLE SalesOrderDetail (
344+
SODetailID INT IDENTITY(1,1) PRIMARY KEY,
345+
SalesOrderID INT NOT NULL,
346+
LineNumber INT NOT NULL,
347+
ItemID INT NOT NULL,
348+
Quantity DECIMAL(18,2) NOT NULL,
349+
UnitPrice DECIMAL(18,4) NOT NULL,
350+
QuantityShipped DECIMAL(18,2) DEFAULT 0,
351+
LineTotal AS (Quantity * UnitPrice) PERSISTED,
352+
CONSTRAINT FK_SODetail_SO FOREIGN KEY (SalesOrderID) REFERENCES SalesOrder(SalesOrderID),
353+
CONSTRAINT FK_SODetail_Item FOREIGN KEY (ItemID) REFERENCES Items(ItemID)
354+
);
355+
356+
-- =============================================
357+
-- Indexes for Performance
358+
-- =============================================
359+
360+
CREATE NONCLUSTERED INDEX IX_Items_Type ON Items(ItemTypeID) INCLUDE (ItemCode, ItemName);
361+
CREATE NONCLUSTERED INDEX IX_Items_Active ON Items(IsActive) WHERE IsActive = 1;
362+
CREATE NONCLUSTERED INDEX IX_PO_Status ON PurchaseOrder(Status, OrderDate);
363+
CREATE NONCLUSTERED INDEX IX_SO_Status ON SalesOrder(Status, OrderDate);
364+
CREATE NONCLUSTERED INDEX IX_ProdOrder_Status ON ProductionOrder(Status, PlannedCompletionDate);
365+
366+
GO
367+
368+
PRINT 'Futon Manufacturing Database Schema created successfully!';
369+
GO

0 commit comments

Comments
 (0)