私はストアドプロシージャで必要な制約を実装できますが、ジョブを実行する外部キー制約のセットを定義できるかどうかは疑問です。3番目のテーブルのFK制約違反を防ぐための制約
私はこれらのキーの関係で、複数のテーブルを持っている:私の質問はあり
NSNs
---
Id PK
Solicitations
----
Id PK
NSNId FK - NSNs
Parts
-----
Id PK
NSNId FK - NSNs
BaseRFQs
-------
Id PK
NSNId FK - NSNs
RFQs
----
Id PK
BaseRFQId FK - BaseRFQs
BaseRFQsSols
------------
BaseRFQId PK/FK - BaseRFQs
SolId PK/FK - Solicitations
RFQsSolsParts
-------------
RFQId PK/FK - RFQs
SolId PK/FK - Solicitations
PartId PK/FK - Parts
:
- はBaseRFQIdとの両方を必要BaseRFQsSols上の外部キー制約を設定することは可能ですSolIdは、同じNSNIdを持つレコードを参照しますか?
- SolIdとPartIdが同じNSNIdを持つレコードを参照するように要求するRFQsSolsPartsに外部キー制約を設定することは可能ですか?とには、他の2つと同じNSNIdを持つBaseRFQIdを参照するためにRFQIdが必要ですか?私は(私が間違って理解していれば、私を修正してください)それを理解するよう私が求めているCONSTRAINT FOREIGN KEY構文はANSI準拠ですが、解決策のoughtn'tはとの間で変化することがので、私は、MySQLを使用してい
DBMS実装。
EDITは:彼らが今立つようドリューの要求@ごとに、ここでのテーブル定義は、以下のとおりです。
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
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_idx` (`NSNId`)
CONSTRAINT `NSNId` FOREIGN KEY (`NSNId`) REFERENCES `nsns` (`ID`)
) ENGINE=InnoDB AUTO_INCREMENT=10 DEFAULT CHARSET=latin7
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_idx` (`NSNId`)
CONSTRAINT `NSNId` FOREIGN KEY (`NSNId`) REFERENCES `nsns` (`ID`)
) ENGINE=InnoDB AUTO_INCREMENT=18 DEFAULT CHARSET=latin7
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_idx` (`NSNId`),
CONSTRAINT `NSNId` 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
CREATE TABLE `baserfqssols` (
`BaseRFQId` int(11) NOT NULL,
`SolId` int(11) NOT NULL,
`LineItemNo` int(11) NOT NULL DEFAULT '1',
PRIMARY KEY (`BaseRFQId`,`SolId`),
KEY `RFQ_idx` (`BaseRFQId`),
KEY `Solicitation_idx` (`SolId`)
) ENGINE=MyISAM DEFAULT CHARSET=latin7
CREATE TABLE `rfqssolsparts` (
`RFQId` int(11) NOT NULL,
`SolId` int(11) NOT NULL,
`PartId` int(11) NOT NULL,
`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`)
) ENGINE=InnoDB DEFAULT CHARSET=latin7
なぜ各XYZ用のテーブルxyz'を作成 'ショーを公開しません。私たちの何人かは次の質問にちょうど向かいます。 – Drew
ありがとう@Drew。私はそれをします。私は過度に複雑にしたくなかった... – BobRodes
私はあなたが宣言的にしたいことはできないとは言わないが、どうして描けないのか分からない。それは私のプロジェクトだったので、私はFK制約を可能な限り宣言して、トリガーを使用して検証の最後のステップを行うことになるでしょう。 –