- Strip emojis from 47 markdown files across docs/, sql/, and root - Add docs/DOCS_CONSOLIDATION_PLAN.md with plan to reduce 45 docs to 8 - Establish no-emoji rule for documentation going forward 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
26 KiB
PC to Machines Consolidation - Complete Design Document
Date Created: 2025-11-06 Status: DESIGN PHASE Complexity: CRITICAL - MASSIVE REFACTORING Production Deployment: All SQL changes must be tracked
Executive Summary
This document outlines the plan to consolidate the pc table (277 records) into the machines table (266 records) and implement a generic communications infrastructure.
Goals:
- Eliminate the
pctable by migrating all data intomachines - Create a generic
communicationssystem supporting multiple communication types (IP, Serial, etc.) - Maintain all existing functionality through views and code updates
- Enable future extensibility for new communication types
Impact:
- Tables to modify: 12+
- Views to update: 19
- ASP files: TBD (likely 50+)
- Data records: 543 machines total (266 current + 277 PCs)
Part 1: Current State Analysis
1.1 PC Table Structure (277 records)
CREATE TABLE pc (
pcid INT(11) PRIMARY KEY AUTO_INCREMENT,
hostname VARCHAR(100),
serialnumber VARCHAR(100),
loggedinuser VARCHAR(100),
pctypeid INT(11), -- FK to pctype
machinenumber VARCHAR(50), -- Links to machines.machinenumber
lastupdated DATETIME,
dateadded DATETIME,
warrantyenddate DATE,
warrantystatus VARCHAR(50),
warrantydaysremaining INT(11),
warrantyservicelevel VARCHAR(100),
warrantylastchecked DATETIME,
modelnumberid INT(11), -- FK to models
isactive TINYINT(1),
requires_manual_machine_config TINYINT(1),
osid INT(11), -- FK to operatingsystems
pcstatusid INT(11) -- FK to pcstatus
);
1.2 Machines Table Structure (266 records)
CREATE TABLE machines (
machineid INT(11) PRIMARY KEY AUTO_INCREMENT,
machinetypeid INT(11) NOT NULL DEFAULT 1, -- FK to machinetypes
machinenumber TINYTEXT,
printerid INT(11),
alias TINYTEXT,
businessunitid INT(11),
modelnumberid INT(11), -- FK to models
isactive INT(11),
ipaddress1 CHAR(50), -- Will be deprecated
ipaddress2 CHAR(50), -- Will be deprecated
machinenotes TEXT,
mapleft SMALLINT(6),
maptop SMALLINT(6),
isvnc BIT(1),
islocationonly BIT(1)
);
1.3 Existing Communication Tables
pc_comm_config (Serial/IP Configuration)
CREATE TABLE pc_comm_config (
configid INT(11) PRIMARY KEY,
pcid INT(11) NOT NULL, -- FK to pc
configtype VARCHAR(50), -- 'Serial', 'IP', etc.
portid VARCHAR(20), -- COM port
baud INT(11),
databits INT(11),
stopbits VARCHAR(5),
parity VARCHAR(10),
crlf VARCHAR(5),
ipaddress VARCHAR(45),
socketnumber INT(11),
additionalsettings TEXT,
lastupdated DATETIME
);
pc_network_interfaces (Network Cards)
CREATE TABLE pc_network_interfaces (
interfaceid INT(11) PRIMARY KEY,
pcid INT(11) NOT NULL, -- FK to pc
interfacename VARCHAR(255),
ipaddress VARCHAR(45),
subnetmask VARCHAR(45),
defaultgateway VARCHAR(45),
macaddress VARCHAR(17),
isdhcp TINYINT(1),
isactive TINYINT(1),
ismachinenetwork TINYINT(1),
lastupdated DATETIME
);
pc_dnc_config (DNC Configuration)
CREATE TABLE pc_dnc_config (
dncid INT(11) PRIMARY KEY,
pcid INT(11) NOT NULL UNIQUE, -- FK to pc
site VARCHAR(100),
cnc VARCHAR(100),
ncif VARCHAR(50),
machinenumber VARCHAR(50),
hosttype VARCHAR(50),
ftphostprimary VARCHAR(100),
ftphostsecondary VARCHAR(100),
ftpaccount VARCHAR(100),
debug VARCHAR(10),
uploads VARCHAR(10),
scanner VARCHAR(10),
dripfeed VARCHAR(10),
additionalsettings TEXT,
lastupdated DATETIME,
dualpath_enabled TINYINT(1),
path1_name VARCHAR(255),
path2_name VARCHAR(255),
ge_registry_32bit TINYINT(1),
ge_registry_64bit TINYINT(1),
ge_registry_notes TEXT
);
1.4 Dependencies
Tables Referencing PC:
- machine_overrides - Manual machine number overrides for PCs
- machine_pc_relationships - Many-to-many relationships
- pc_comm_config - Serial/IP communication settings
- pc_dnc_config - DNC configuration
- pc_dualpath_assignments - Secondary machine assignments
- pc_network_interfaces - Network interface details
Views Using PC (19 views):
- vw_active_pcs
- vw_dnc_config
- vw_dualpath_management
- vw_engineer_pcs
- vw_ge_machines
- vw_machine_assignment_status
- vw_machine_assignments
- vw_machine_type_stats
- vw_multi_pc_machines
- vw_pc_network_summary
- vw_pc_resolved_machines
- vw_pc_summary
- vw_pcs_by_hardware
- vw_recent_updates
- vw_shopfloor_applications_summary
- vw_shopfloor_comm_config
- vw_shopfloor_pcs
- vw_standard_pcs
- vw_vendor_summary
- vw_warranties_expiring
Part 2: New Design - Communications Infrastructure
2.1 New Table: comstypes (Communication Types)
CREATE TABLE comstypes (
comstypeid INT(11) PRIMARY KEY AUTO_INCREMENT,
typename VARCHAR(50) NOT NULL UNIQUE, -- 'IP', 'Serial', 'USB', 'Parallel', 'Network', etc.
description VARCHAR(255),
requires_port TINYINT(1) DEFAULT 0, -- Does this type need a port? (Serial, Parallel)
requires_ipaddress TINYINT(1) DEFAULT 0, -- Does this type need an IP? (IP, Network)
isactive TINYINT(1) DEFAULT 1,
displayorder INT(11) DEFAULT 0,
dateadded DATETIME DEFAULT CURRENT_TIMESTAMP
);
Initial Data:
INSERT INTO comstypes (typename, description, requires_port, requires_ipaddress, displayorder) VALUES
('IP', 'TCP/IP Network Communication', 0, 1, 1),
('Serial', 'Serial Port Communication (RS-232)', 1, 0, 2),
('Network_Interface', 'Network Interface Card', 0, 1, 3),
('USB', 'USB Connection', 1, 0, 4),
('Parallel', 'Parallel Port Connection', 1, 0, 5),
('VNC', 'Virtual Network Computing', 0, 1, 6),
('FTP', 'File Transfer Protocol', 0, 1, 7);
2.2 New Table: communications
CREATE TABLE communications (
comid INT(11) PRIMARY KEY AUTO_INCREMENT,
machineid INT(11) NOT NULL, -- FK to machines.machineid
comstypeid INT(11) NOT NULL, -- FK to comstypes.comstypeid
-- Generic fields applicable to multiple types
ipaddress VARCHAR(45), -- For IP-based communications
port INT(11), -- Port number (for IP) or COM port number
portname VARCHAR(20), -- COM1, COM2, LPT1, etc.
macaddress VARCHAR(17), -- MAC address for network interfaces
-- Network-specific fields
subnetmask VARCHAR(45),
defaultgateway VARCHAR(45),
dnsserver VARCHAR(45),
isdhcp TINYINT(1) DEFAULT 0,
-- Serial-specific fields
baud INT(11), -- 9600, 115200, etc.
databits INT(11), -- 7, 8
stopbits VARCHAR(5), -- '1', '1.5', '2'
parity VARCHAR(10), -- 'None', 'Even', 'Odd', 'Mark', 'Space'
flowcontrol VARCHAR(20), -- 'None', 'Hardware', 'Software'
-- Protocol-specific fields
protocol VARCHAR(50), -- 'TCP', 'UDP', 'FTP', 'HTTP', etc.
username VARCHAR(100), -- For authenticated protocols
password VARCHAR(255), -- Encrypted password
-- General metadata
interfacename VARCHAR(255), -- Network adapter name
description VARCHAR(255),
isprimary TINYINT(1) DEFAULT 0, -- Is this the primary communication method?
isactive TINYINT(1) DEFAULT 1,
ismachinenetwork TINYINT(1) DEFAULT 0, -- Is this for machine network (vs office network)?
-- Additional settings as JSON/TEXT
additionalsettings TEXT, -- JSON for future extensibility
-- Audit fields
lastupdated DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
dateadded DATETIME DEFAULT CURRENT_TIMESTAMP,
-- Indexes
KEY idx_machineid (machineid),
KEY idx_comstypeid (comstypeid),
KEY idx_ipaddress (ipaddress),
KEY idx_isactive (isactive),
KEY idx_isprimary (isprimary),
-- Foreign Keys
CONSTRAINT fk_communications_machineid FOREIGN KEY (machineid) REFERENCES machines(machineid),
CONSTRAINT fk_communications_comstypeid FOREIGN KEY (comstypeid) REFERENCES comstypes(comstypeid)
);
2.3 Modified Machines Table
Add new fields to support PC data and communications:
NOTE: Warranty fields are NOT added to machines table. See WARRANTY_MANAGEMENT_DESIGN.md for the separate warranty infrastructure.
ALTER TABLE machines
-- PC-specific fields
ADD COLUMN hostname VARCHAR(100) AFTER machinenumber,
ADD COLUMN serialnumber VARCHAR(100) AFTER modelnumberid,
ADD COLUMN loggedinuser VARCHAR(100) AFTER hostname,
ADD COLUMN osid INT(11) AFTER modelnumberid,
ADD COLUMN pcstatusid INT(11) AFTER osid,
ADD COLUMN pctypeid INT(11) AFTER machinetypeid,
-- Configuration flags
ADD COLUMN requires_manual_machine_config TINYINT(1) DEFAULT 0,
-- Audit fields
ADD COLUMN lastupdated DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
ADD COLUMN dateadded DATETIME DEFAULT CURRENT_TIMESTAMP,
-- Foreign keys
ADD CONSTRAINT fk_machines_osid FOREIGN KEY (osid) REFERENCES operatingsystems(osid),
ADD CONSTRAINT fk_machines_pcstatusid FOREIGN KEY (pcstatusid) REFERENCES pcstatus(pcstatusid),
ADD CONSTRAINT fk_machines_pctypeid FOREIGN KEY (pctypeid) REFERENCES pctype(pctypeid);
-- Indexes
CREATE INDEX idx_machines_hostname ON machines(hostname);
CREATE INDEX idx_machines_serialnumber ON machines(serialnumber);
CREATE INDEX idx_machines_pctypeid ON machines(pctypeid);
CREATE INDEX idx_machines_osid ON machines(osid);
CREATE INDEX idx_machines_lastupdated ON machines(lastupdated);
Part 3: Migration Strategy
3.1 Migration Phases
Phase 1: Schema Preparation (REVERSIBLE)
- Create
comstypestable - Create
communicationstable - Add new columns to
machinestable - Create backup tables
Phase 2: Data Migration (REVERSIBLE with backup)
- Migrate PC records to machines table
- Migrate PC communication data to communications table
- Migrate network interface data to communications table
- Migrate DNC configuration to communications or new DNC table
- Update relationship tables
Phase 3: Reference Updates (REQUIRES TESTING)
- Create compatibility views (pc → machines)
- Update dependent tables
- Update 19 existing views
Phase 4: Application Updates (REQUIRES EXTENSIVE TESTING)
- Update ASP files
- Update stored procedures (if any)
- Test all functionality
Phase 5: Cleanup (IRREVERSIBLE - DO AFTER 30 DAYS)
- Drop old
pctable - Drop compatibility views
- Remove deprecated ipaddress1/ipaddress2 from machines
3.2 Machine Type for PCs
We need to add machine types for PCs:
INSERT INTO machinetypes (machinetype, machinedescription, functionalaccountid, isactive)
VALUES
('PC - Standard', 'Standard office/engineering workstation', (SELECT functionalaccountid FROM functionalaccounts WHERE functionalaccount = 'IT' LIMIT 1), 1),
('PC - Shopfloor', 'Shopfloor machine control PC', (SELECT functionalaccountid FROM functionalaccounts WHERE functionalaccount = 'MFG' LIMIT 1), 1),
('PC - Engineer', 'Engineering workstation', (SELECT functionalaccountid FROM functionalaccounts WHERE functionalaccount = 'ENG' LIMIT 1), 1);
3.3 Data Mapping: PC → Machines
| PC Field | Machines Field | Notes |
|---|---|---|
| pcid | machineid | New auto-increment ID |
| hostname | hostname | NEW COLUMN |
| serialnumber | serialnumber | NEW COLUMN |
| loggedinuser | loggedinuser | NEW COLUMN |
| pctypeid | pctypeid | NEW COLUMN, FK preserved |
| machinenumber | machinenumber | Existing field |
| lastupdated | lastupdated | NEW COLUMN |
| dateadded | dateadded | NEW COLUMN |
| modelnumberid | modelnumberid | Existing field |
| isactive | isactive | Existing field |
| requires_manual_machine_config | requires_manual_machine_config | NEW COLUMN |
| osid | osid | NEW COLUMN, FK preserved |
| pcstatusid | pcstatusid | NEW COLUMN, FK preserved |
| N/A | machinetypeid | Map from pctypeid to new machine types |
| N/A | alias | Set to hostname for PCs |
| N/A | businessunitid | Default to 1 or derive from location |
Warranty Fields: Migrated to warranties table (see WARRANTY_MANAGEMENT_DESIGN.md)
- warrantyenddate → warranties.enddate
- warrantystatus → warranties.status
- warrantyservicelevel → warranties.servicelevel
- warrantylastchecked → warranties.lastcheckeddate
3.4 Data Mapping: pc_network_interfaces → communications
| Old Field | New Field | New comstypeid |
|---|---|---|
| interfaceid | comid | Auto-increment |
| pcid | machineid | Lookup from migrated PCs |
| N/A | comstypeid | 3 (Network_Interface) |
| ipaddress | ipaddress | Direct copy |
| subnetmask | subnetmask | Direct copy |
| defaultgateway | defaultgateway | Direct copy |
| macaddress | macaddress | Direct copy |
| interfacename | interfacename | Direct copy |
| isdhcp | isdhcp | Direct copy |
| isactive | isactive | Direct copy |
| ismachinenetwork | ismachinenetwork | Direct copy |
3.5 Data Mapping: pc_comm_config → communications
| Old Field | New Field | New comstypeid |
|---|---|---|
| configid | comid | Auto-increment |
| pcid | machineid | Lookup from migrated PCs |
| configtype | comstypeid | Map 'Serial'→2, 'IP'→1, etc. |
| portid | portname | Direct copy (COM1, etc.) |
| baud | baud | Direct copy |
| databits | databits | Direct copy |
| stopbits | stopbits | Direct copy |
| parity | parity | Direct copy |
| ipaddress | ipaddress | Direct copy |
| socketnumber | port | Direct copy |
| additionalsettings | additionalsettings | Direct copy |
Part 4: SQL Migration Scripts
4.1 Script 01: Schema Creation
File: sql/01_create_communications_infrastructure.sql
-- =====================================================
-- SCRIPT 01: Create Communications Infrastructure
-- =====================================================
-- Date: 2025-11-06
-- Purpose: Create comstypes and communications tables
-- Status: REVERSIBLE (has rollback script)
-- =====================================================
USE shopdb;
SET SQL_SAFE_UPDATES = 0;
-- Create comstypes table
CREATE TABLE IF NOT EXISTS comstypes (
comstypeid INT(11) PRIMARY KEY AUTO_INCREMENT,
typename VARCHAR(50) NOT NULL UNIQUE,
description VARCHAR(255),
requires_port TINYINT(1) DEFAULT 0,
requires_ipaddress TINYINT(1) DEFAULT 0,
isactive TINYINT(1) DEFAULT 1,
displayorder INT(11) DEFAULT 0,
dateadded DATETIME DEFAULT CURRENT_TIMESTAMP,
KEY idx_isactive (isactive),
KEY idx_displayorder (displayorder)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
-- Insert communication types
INSERT INTO comstypes (typename, description, requires_port, requires_ipaddress, displayorder) VALUES
('IP', 'TCP/IP Network Communication', 0, 1, 1),
('Serial', 'Serial Port Communication (RS-232)', 1, 0, 2),
('Network_Interface', 'Network Interface Card', 0, 1, 3),
('USB', 'USB Connection', 1, 0, 4),
('Parallel', 'Parallel Port Connection', 1, 0, 5),
('VNC', 'Virtual Network Computing', 0, 1, 6),
('FTP', 'File Transfer Protocol', 0, 1, 7);
-- Create communications table
CREATE TABLE IF NOT EXISTS communications (
comid INT(11) PRIMARY KEY AUTO_INCREMENT,
machineid INT(11) NOT NULL,
comstypeid INT(11) NOT NULL,
-- Generic fields
ipaddress VARCHAR(45),
port INT(11),
portname VARCHAR(20),
macaddress VARCHAR(17),
-- Network-specific
subnetmask VARCHAR(45),
defaultgateway VARCHAR(45),
dnsserver VARCHAR(45),
isdhcp TINYINT(1) DEFAULT 0,
-- Serial-specific
baud INT(11),
databits INT(11),
stopbits VARCHAR(5),
parity VARCHAR(10),
flowcontrol VARCHAR(20),
-- Protocol-specific
protocol VARCHAR(50),
username VARCHAR(100),
password VARCHAR(255),
-- General metadata
interfacename VARCHAR(255),
description VARCHAR(255),
isprimary TINYINT(1) DEFAULT 0,
isactive TINYINT(1) DEFAULT 1,
ismachinenetwork TINYINT(1) DEFAULT 0,
-- Additional settings
additionalsettings TEXT,
-- Audit fields
lastupdated DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
dateadded DATETIME DEFAULT CURRENT_TIMESTAMP,
-- Indexes
KEY idx_machineid (machineid),
KEY idx_comstypeid (comstypeid),
KEY idx_ipaddress (ipaddress),
KEY idx_isactive (isactive),
KEY idx_isprimary (isprimary),
-- Foreign Keys
CONSTRAINT fk_communications_machineid FOREIGN KEY (machineid) REFERENCES machines(machineid),
CONSTRAINT fk_communications_comstypeid FOREIGN KEY (comstypeid) REFERENCES comstypes(comstypeid)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
-- Verification
SELECT 'comstypes table created' AS status, COUNT(*) AS type_count FROM comstypes;
SELECT 'communications table created' AS status;
SET SQL_SAFE_UPDATES = 1;
4.2 Script 02: Extend Machines Table
File: sql/02_extend_machines_table.sql
NOTE: Warranty fields removed - see script 04 for warranty infrastructure
-- =====================================================
-- SCRIPT 02: Extend Machines Table for PC Data
-- =====================================================
-- Date: 2025-11-06
-- Purpose: Add PC-related columns to machines table
-- Status: REVERSIBLE (has rollback script)
-- NOTE: Warranty data goes to separate warranties table (script 04)
-- =====================================================
USE shopdb;
SET SQL_SAFE_UPDATES = 0;
-- Add PC-specific fields
ALTER TABLE machines
ADD COLUMN IF NOT EXISTS hostname VARCHAR(100) AFTER machinenumber,
ADD COLUMN IF NOT EXISTS serialnumber VARCHAR(100) AFTER modelnumberid,
ADD COLUMN IF NOT EXISTS loggedinuser VARCHAR(100) AFTER hostname,
ADD COLUMN IF NOT EXISTS osid INT(11) AFTER modelnumberid,
ADD COLUMN IF NOT EXISTS pcstatusid INT(11) AFTER osid,
ADD COLUMN IF NOT EXISTS pctypeid INT(11) AFTER machinetypeid;
-- Add configuration flags
ALTER TABLE machines
ADD COLUMN IF NOT EXISTS requires_manual_machine_config TINYINT(1) DEFAULT 0 AFTER islocationonly;
-- Add audit fields
ALTER TABLE machines
ADD COLUMN IF NOT EXISTS lastupdated DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP AFTER requires_manual_machine_config,
ADD COLUMN IF NOT EXISTS dateadded DATETIME DEFAULT CURRENT_TIMESTAMP AFTER lastupdated;
-- Add foreign keys
ALTER TABLE machines
ADD CONSTRAINT fk_machines_osid FOREIGN KEY (osid) REFERENCES operatingsystems(osid);
ALTER TABLE machines
ADD CONSTRAINT fk_machines_pcstatusid FOREIGN KEY (pcstatusid) REFERENCES pcstatus(pcstatusid);
ALTER TABLE machines
ADD CONSTRAINT fk_machines_pctypeid FOREIGN KEY (pctypeid) REFERENCES pctype(pctypeid);
-- Create indexes
CREATE INDEX IF NOT EXISTS idx_machines_hostname ON machines(hostname);
CREATE INDEX IF NOT EXISTS idx_machines_serialnumber ON machines(serialnumber);
CREATE INDEX IF NOT EXISTS idx_machines_pctypeid ON machines(pctypeid);
CREATE INDEX IF NOT EXISTS idx_machines_osid ON machines(osid);
CREATE INDEX IF NOT EXISTS idx_machines_lastupdated ON machines(lastupdated);
-- Verification
DESCRIBE machines;
SET SQL_SAFE_UPDATES = 1;
4.3 Script 03: Create PC Machine Types
File: sql/03_create_pc_machine_types.sql
-- =====================================================
-- SCRIPT 03: Create Machine Types for PCs
-- =====================================================
-- Date: 2025-11-06
-- Purpose: Add PC-related machine types
-- Status: REVERSIBLE
-- =====================================================
USE shopdb;
SET SQL_SAFE_UPDATES = 0;
-- Get or create functional accounts
INSERT IGNORE INTO functionalaccounts (functionalaccount, description, isactive)
VALUES
('IT', 'Information Technology', 1),
('MFG', 'Manufacturing', 1),
('ENG', 'Engineering', 1);
-- Create PC machine types
INSERT INTO machinetypes (machinetype, machinedescription, functionalaccountid, isactive)
SELECT 'PC - Standard', 'Standard office/engineering workstation', functionalaccountid, 1
FROM functionalaccounts WHERE functionalaccount = 'IT' LIMIT 1
WHERE NOT EXISTS (SELECT 1 FROM machinetypes WHERE machinetype = 'PC - Standard');
INSERT INTO machinetypes (machinetype, machinedescription, functionalaccountid, isactive)
SELECT 'PC - Shopfloor', 'Shopfloor machine control PC', functionalaccountid, 1
FROM functionalaccounts WHERE functionalaccount = 'MFG' LIMIT 1
WHERE NOT EXISTS (SELECT 1 FROM machinetypes WHERE machinetype = 'PC - Shopfloor');
INSERT INTO machinetypes (machinetype, machinedescription, functionalaccountid, isactive)
SELECT 'PC - Engineer', 'Engineering workstation', functionalaccountid, 1
FROM functionalaccounts WHERE functionalaccount = 'ENG' LIMIT 1
WHERE NOT EXISTS (SELECT 1 FROM machinetypes WHERE machinetype = 'PC - Engineer');
-- Verification
SELECT * FROM machinetypes WHERE machinetype LIKE 'PC -%';
SET SQL_SAFE_UPDATES = 1;
Part 5: Rollback Scripts
5.1 Rollback Script 01
File: sql/ROLLBACK_01_communications_infrastructure.sql
-- =====================================================
-- ROLLBACK 01: Remove Communications Infrastructure
-- =====================================================
USE shopdb;
SET SQL_SAFE_UPDATES = 0;
-- Drop tables in correct order (FK constraints)
DROP TABLE IF EXISTS communications;
DROP TABLE IF EXISTS comstypes;
SELECT 'Communications infrastructure removed' AS status;
SET SQL_SAFE_UPDATES = 1;
5.2 Rollback Script 02
File: sql/ROLLBACK_02_machines_table_extensions.sql
-- =====================================================
-- ROLLBACK 02: Remove Machines Table Extensions
-- =====================================================
USE shopdb;
SET SQL_SAFE_UPDATES = 0;
-- Drop foreign keys first
ALTER TABLE machines DROP FOREIGN KEY IF EXISTS fk_machines_osid;
ALTER TABLE machines DROP FOREIGN KEY IF EXISTS fk_machines_pcstatusid;
ALTER TABLE machines DROP FOREIGN KEY IF EXISTS fk_machines_pctypeid;
-- Drop indexes
DROP INDEX IF EXISTS idx_machines_hostname ON machines;
DROP INDEX IF EXISTS idx_machines_serialnumber ON machines;
DROP INDEX IF EXISTS idx_machines_pctypeid ON machines;
DROP INDEX IF EXISTS idx_machines_osid ON machines;
DROP INDEX IF EXISTS idx_machines_lastupdated ON machines;
-- Remove columns (MySQL 5.6 doesn't support IF EXISTS for columns)
ALTER TABLE machines
DROP COLUMN hostname,
DROP COLUMN serialnumber,
DROP COLUMN loggedinuser,
DROP COLUMN osid,
DROP COLUMN pcstatusid,
DROP COLUMN pctypeid,
DROP COLUMN requires_manual_machine_config,
DROP COLUMN lastupdated,
DROP COLUMN dateadded;
SELECT 'Machines table extensions removed' AS status;
SET SQL_SAFE_UPDATES = 1;
Part 6: Next Steps & Considerations
6.1 Critical Decisions Needed
-
DNC Configuration:
- Keep pc_dnc_config as-is but reference machines instead of pc?
- Or migrate to communications table with comstypeid='DNC'?
- Recommendation: Keep separate, too complex for generic table
-
Machine Overrides:
- Keep machine_overrides table?
- Recommendation: Yes, but update FK to machines
-
Warranty Management:
- Extend to all machines or keep PC-specific?
- Recommendation: Available for all machines
-
Machine Numbers:
- PCs currently link to machines via machinenumber (string match)
- After migration, use direct machineid FK
- Recommendation: Add explicit FK relationships
6.2 Testing Requirements
-
Data Integrity:
- Verify all 277 PCs migrated
- Verify all communication records migrated
- Verify all FK relationships intact
-
View Testing:
- Test all 19 views return same data
- Performance testing for complex views
-
Application Testing:
- Test every ASP file that touches pc table
- Test all CRUD operations
- Test warranty tracking
- Test DNC configuration
6.3 Production Deployment Checklist
- Create full database backup
- Test migration on dev environment
- Create compatibility views for old queries
- Update all ASP files
- Schedule maintenance window (4-6 hours recommended)
- Prepare rollback procedure
- Document all changes
- Train users on any UI changes
Part 7: Estimated Timeline
| Phase | Duration | Dependencies |
|---|---|---|
| Schema Design | 1 day | None |
| Create Migration Scripts | 2-3 days | Schema approval |
| Data Migration Testing | 2-3 days | Scripts complete |
| View Updates | 1-2 days | Data migration tested |
| ASP File Analysis | 2-3 days | View updates tested |
| ASP File Updates | 5-7 days | File analysis complete |
| Integration Testing | 3-5 days | All updates complete |
| User Acceptance Testing | 2-3 days | Integration testing passed |
| Production Deployment | 1 day | UAT passed |
| Total | 20-30 days |
Appendix A: Risk Assessment
| Risk | Severity | Mitigation |
|---|---|---|
| Data loss during migration | CRITICAL | Full backups, test on dev first, rollback scripts |
| Application downtime | HIGH | Deploy during maintenance window, parallel cutover |
| Performance degradation | MEDIUM | Index optimization, query testing |
| View compatibility issues | HIGH | Create compatibility views, thorough testing |
| User training needed | LOW | Minimal UI changes expected |
Appendix B: File Impact Analysis
To be completed after code review
Files to analyze:
- All files with "pc" in filename
- All files referencing pc table
- All files using pc views
Document Status: DRAFT Next Review Date: TBD Approval Required From: System Administrator, Lead Developer