0

次の2つのテーブルの間に1対オプションの多関係を作成したいと思います。

'FK_transactionmember' FOREGIN KEY ('MemberID') REFERENCES 'member' ('ID')

1対多の関係 (上記)である外部キー制約ウィッチを作成します。この場合、トランザクションにはメンバー ID が必要ですが、メンバーはオプションです。

このオプションの状況を制御するにはどうすればよいですか?

メンバー:

CREATE TABLE `member` (
`ID` int(11) NOT NULL AUTO_INCREMENT,
`FirstName` varchar(30) DEFAULT NULL,
`LastName` varchar(30) DEFAULT NULL,
`PermanentAddress` varchar(100) DEFAULT NULL,
`TemporaryAddress` varchar(100) DEFAULT NULL,
`Zip` varchar(30) DEFAULT NULL,
`City` varchar(30) DEFAULT NULL,
`LastVisit` datetime DEFAULT NULL,
`TotalVisit` datetime DEFAULT NULL,
`Active` tinyint(1) DEFAULT NULL,
 PRIMARY KEY (`ID`)
 ) ENGINE=InnoDB DEFAULT CHARSET=latin1

取引

CREATE TABLE `transaction` (
`ID` int(11) NOT NULL AUTO_INCREMENT,
`MemberID` int(11) DEFAULT '0',
`UserID` int(11) DEFAULT NULL,
`Total` float DEFAULT NULL,
PRIMARY KEY (`ID`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1
4

2 に答える 2

1

MemberID がオプションの場合、デフォルト値は 0 ではなく null にする必要があります。したがって、データが存在しない場合は null 値が許可されます。

CREATE TABLE `transaction` (
    `ID` int(11) NOT NULL AUTO_INCREMENT,
    `MemberID` int(11) DEFAULT NULL,
    `UserID` int(11) DEFAULT NULL,
    `Total` float DEFAULT NULL,
    PRIMARY KEY (`ID`),
    KEY `FK_transactionmember` (`MemberID`),
    CONSTRAINT `FK_transactionmember` FOREGIN KEY (`MemberID`) REFERENCES `member` (`ID`) ON DELETE CASCADE ON UPDATE CASCADE,
) ENGINE=InnoDB DEFAULT CHARSET=latin1
于 2012-04-10T05:52:49.653 に答える
1

以下のようなテーブルを作成する方法は (最後に) 2 つあります。

CREATE TABLE `transaction` (
`ID` int(11) NOT NULL AUTO_INCREMENT,
`MemberID` int(11) NULL,
`UserID` int(11) DEFAULT NULL,
`Total` float DEFAULT NULL,
PRIMARY KEY (`ID`),
CONSTRAINT 'FK_transactionmember' 
    FOREGIN KEY ('MemberID') 
    REFERENCES 'member' ('ID')
    ON DELETE NO ACTION
    ON UPDATE NO ACTION
)

メンバーと接続できないときはいつでもに設定MemberIDします。null私の意見では問題ありませんが、BNF要件を満たしていないか、以下のように異なるテーブルを使用して両方のテーブルをリンクしていません。

CREATE TABLE `MemberTransactions` (
`MemberID` int(11) NULL,
`TransactionID` int(11) DEFAULT NULL,

CONSTRAINT 'FK_member' 
    FOREGIN KEY ('MemberID') 
    REFERENCES 'member' ('ID')
    ON DELETE NO ACTION
    ON UPDATE NO ACTION,
CONSTRAINT 'FK_transaction' 
    FOREGIN KEY ('TransactionID') 
    REFERENCES 'transaction' ('ID')
    ON DELETE NO ACTION
    ON UPDATE NO ACTION
)

次に、列transactionのないテーブル。MemberID

同様の質問を追加: Nullable Foreign Key bad practice? .

于 2012-04-10T05:55:12.493 に答える