Tôi đã tìm ra solId
của bạn dành cho solitications
. Ban đầu tôi nghĩ nó có nghĩa là rắn (giống như một tảng đá). Vì vậy, điều này có thể được thực hiện thông qua bố cục.
Lưu ý rằng có một vài lỗi đánh máy trong lược đồ được cung cấp. Một số dấu phẩy bị thiếu, một số tên chỉ mục viết sai. Một bảng MyISAM đã thay đổi thành INNODB. Vì vậy, tôi đã thực hiện một số đổi tên. Ngoài ra, xung quanh bảng 5 không có bảng. Vì vậy, nó không giống như thể tập lệnh của bạn sẽ chạy (đối với bảng rfqs
).
Tương tự, lược đồ sau sẽ không thành công do thiếu các bảng của bạn được cung cấp, khoảng 60 đến 70 phần trăm thông qua nó.
Bảng cho đến nay:
create schema slipper;
use slipper;
CREATE TABLE `nsns` (
`ID` int(11) NOT NULL AUTO_INCREMENT,
`NSN` char(16) NOT NULL,
`Description` varchar(100) DEFAULT NULL,
`ShortDesc` varchar(20) DEFAULT NULL,
PRIMARY KEY (`ID`),
UNIQUE KEY `NSN_UNIQUE` (`NSN`)
) ENGINE=InnoDB AUTO_INCREMENT=42 DEFAULT CHARSET=latin7;
drop table if exists `solicitations`;
CREATE TABLE `solicitations` (
`ID` int(11) NOT NULL AUTO_INCREMENT,
`NSNId` int(11) NOT NULL,
`UOMId` int(11) NOT NULL DEFAULT '1',
`QUPId` int(11) NOT NULL DEFAULT '0',
`SolicitationNo` char(16) NOT NULL,
`Quantity` int(11) NOT NULL,
`ReturnByDate` date NOT NULL,
`StatusId` int(11) NOT NULL DEFAULT '1',
`Memo` text,
PRIMARY KEY (`ID`),
UNIQUE KEY `SolicitationNo_UNIQUE` (`SolicitationNo`),
KEY `NSN_idx1111` (`NSNId`),
KEY `NSN_idx1112` (`ID`,`NSNId`), -- atm an necessary evil. Revisit, perhaps collapse one
CONSTRAINT `NSNId` FOREIGN KEY (`NSNId`) REFERENCES `nsns` (`ID`)
) ENGINE=InnoDB AUTO_INCREMENT=10 DEFAULT CHARSET=latin7;
drop table if exists `parts`;
CREATE TABLE `parts` (
`ID` int(11) NOT NULL AUTO_INCREMENT,
`NSNId` int(11) NOT NULL,
`VendorId` int(11) NOT NULL,
`UOMId` int(11) NOT NULL DEFAULT '1',
`QUPId` int(11) NOT NULL DEFAULT '1',
`StatusId` int(11) DEFAULT '1',
`PartNo` varchar(45) DEFAULT NULL,
`Memo` text,
PRIMARY KEY (`ID`),
KEY `NSN_idx2222` (`NSNId`),
KEY `NSN_idx2223` (`ID`,`NSNId`), -- atm an necessary evil. Revisit, perhaps collapse one
CONSTRAINT `NSNId2222` FOREIGN KEY (`NSNId`) REFERENCES `nsns` (`ID`)
) ENGINE=InnoDB AUTO_INCREMENT=18 DEFAULT CHARSET=latin7;
drop table if exists `baserfqs`;
CREATE TABLE `baserfqs` (
`ID` int(11) NOT NULL AUTO_INCREMENT,
`NSNId` int(11) NOT NULL,
`BRFQNo` varchar(45) DEFAULT NULL,
`Memo` text,
`Finalized` bit(1) NOT NULL DEFAULT b'0',
PRIMARY KEY (`ID`),
UNIQUE KEY `BRFQNo_UNIQUE` (`BRFQNo`),
KEY `NSN_idx4444` (`NSNId`),
KEY `NSN_idx4445` (`ID`,`NSNId`), -- atm an necessary evil. Revisit, perhaps collapse one
CONSTRAINT `NSNId4444` FOREIGN KEY (`NSNId`) REFERENCES `nsns` (`ID`)
) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=latin7;
CREATE TABLE `rfqs` (
`ID` int(11) NOT NULL AUTO_INCREMENT,
`BaseRFQId` int(11) NOT NULL,
`VendorId` int(11) NOT NULL,
`RFQNo` varchar(45) NOT NULL,
`StatusId` int(11) NOT NULL DEFAULT '6',
`DateSent` date DEFAULT NULL,
`DateResponded` date DEFAULT NULL,
`VendorNotes` text,
`QuotedBy` varchar(45) DEFAULT NULL,
`Title` varchar(45) DEFAULT NULL,
`ValidityCodeId` int(11) DEFAULT '4',
`UnitWt` decimal(10,3) DEFAULT NULL,
`WtUOMId` int(11) DEFAULT '1',
PRIMARY KEY (`ID`),
UNIQUE KEY `RFQNo_UNIQUE` (`RFQNo`),
KEY `BaseRFQId_idx` (`BaseRFQId`),
KEY `VendorId_idx` (`VendorId`),
KEY `StatusId_idx` (`StatusId`),
KEY `ValidityCodeId_idx` (`ValidityCodeId`),
KEY `WtUOMId_idx` (`WtUOMId`),
CONSTRAINT `WtUOMId` FOREIGN KEY (`WtUOMId`) REFERENCES `wtuoms` (`ID`),
CONSTRAINT `BaseRFQId` FOREIGN KEY (`BaseRFQId`) REFERENCES `baserfqs` (`ID`),
CONSTRAINT `StatusId` FOREIGN KEY (`StatusId`) REFERENCES `rfqstatus` (`ID`),
CONSTRAINT `ValidityCodeId` FOREIGN KEY (`ValidityCodeId`) REFERENCES `validitycodes` (`ID`),
CONSTRAINT `VendorId` FOREIGN KEY (`VendorId`) REFERENCES `vendors` (`ID`)
) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=latin7;
drop table if exists `compTableX001`;
CREATE TABLE `compTableX001`
( -- a composition table for FK's in `baserfqssols`
`ID` int(11) AUTO_INCREMENT PRIMARY KEY,
`BaseRFQId` int(11) NOT NULL, -- baserfqs.ID
`SolId` int(11) NOT NULL, -- solicitations.ID
`NSNId` int(11) NOT NULL,
unique key (`BaseRFQId`,`SolId`), -- no dupes allowed
CONSTRAINT `tx001_base` FOREIGN KEY (`BaseRFQId`,`NSNId`) REFERENCES `baserfqs` (`ID`,`NSNId`),
CONSTRAINT `tx001_sol` FOREIGN KEY (`SolId`,`NSNId`) REFERENCES `solicitations` (`ID`,`NSNId`)
) ENGINE=InnoDB DEFAULT CHARSET=latin7;
drop table if exists `compTableX002`;
CREATE TABLE `compTableX002`
( -- a composition table for FK's in `rfqssolsparts`
`ID` int(11) AUTO_INCREMENT PRIMARY KEY,
`BaseRFQId` int(11) NOT NULL, -- baserfqs.ID
`SolId` int(11) NOT NULL, -- solicitations.ID
`PartId` int(11) NOT NULL, -- parts.ID
`NSNId` int(11) NOT NULL,
unique key (`BaseRFQId`,`SolId`,`PartId`), -- no dupes allowed
CONSTRAINT `tx002_base` FOREIGN KEY (`BaseRFQId`,`NSNId`) REFERENCES `baserfqs` (`ID`,`NSNId`),
CONSTRAINT `tx002_sol` FOREIGN KEY (`SolId`,`NSNId`) REFERENCES `solicitations` (`ID`,`NSNId`),
CONSTRAINT `tx002_part` FOREIGN KEY (`PartId`,`NSNId`) REFERENCES `parts` (`ID`,`NSNId`)
) ENGINE=InnoDB DEFAULT CHARSET=latin7;
drop table if exists `baserfqssols`;
CREATE TABLE `baserfqssols` (
`ID` int(11) auto_increment,
`compId` int(11) NOT NULL, -- composition ID `compTableX001`.`ID`
`LineItemNo` int(11) NOT NULL DEFAULT '1',
PRIMARY KEY (`ID`),
CONSTRAINT `basesol_compX001` FOREIGN KEY (`compId`) REFERENCES `compTableX001` (`ID`)
) ENGINE=InnoDB DEFAULT CHARSET=latin7; -- changed engine type
-- Is it possible to set up a foreign key constraint on RFQsSolsParts that requires SolId and PartId to reference records
-- that have the same NSNId, and requires RFQId to reference a BaseRFQId which has the same NSNId as the other two?
drop table if exists `rfqssolsparts`;
CREATE TABLE `rfqssolsparts` (
-- `RFQId` int(11) NOT NULL, -- requirement BBBBBBBBBBBBB
-- `SolId` int(11) NOT NULL, -- requirement AAAAAAAAA
-- `PartId` int(11) NOT NULL, -- requirement AAAAAAAAA
`ID` int(11) auto_increment,
`compId` int(11) NOT NULL, -- composition ID `compTableX002`.`ID`
`CondId` int(11) NOT NULL,
`UOMId` int(11) NOT NULL DEFAULT '1',
`QUPId` int(11) NOT NULL DEFAULT '1',
`UnitPrice` decimal(10,3) NOT NULL,
`LeadTime` int(11) DEFAULT NULL,
`LTCId` int(11) DEFAULT NULL,
`SplsNSNId` int(11) DEFAULT NULL,
`SetupCostInc` bit(1) NOT NULL DEFAULT b'0',
`CertCostInc` bit(1) NOT NULL DEFAULT b'0',
`MfgCerts` bit(1) NOT NULL DEFAULT b'0',
`Altered` bit(1) NOT NULL DEFAULT b'0',
`OrigPkg` bit(1) NOT NULL DEFAULT b'1',
`SplsContNo` varchar(45) DEFAULT NULL,
`SplsDate` date DEFAULT NULL,
-- PRIMARY KEY (`RFQId`,`SolId`,`PartId`)
PRIMARY KEY (`ID`),
CONSTRAINT `triplet_compX002` FOREIGN KEY (`compId`) REFERENCES `compTableX002` (`ID`)
) ENGINE=InnoDB DEFAULT CHARSET=latin7;
compTableX001
giống như một hệ thống phân cấp nhỏ TwoParent-OneChild với tên ID
. Vì vậy, ID
là tên của bậc cha mẹ. Nó có hai cha mẹ (BaseRFQId
và SolId
) và một con (NSNId
). Tên hoặc số nhận dạng, là ID
, là mục tiêu FK của baserfqssols
hàng mà nó hỗ trợ. Đã tham chiếu và Tham khảo , tương ứng.
Tương tự, compTableX002
xuất hiện để giải quyết các điều kiện bây giờ cho Câu hỏi 2.
dọn dẹp:
drop schema slipper;