我忙於一個項目,我遇到的絆腳石之一是:如何以編程方式創建一對一或一對一的關係 - MySQL?
我有一個預訂表,它可能會導致或不會導致發票(因爲某些無關的東西,如取消)。我如何執行一個(在預訂方面)到零或一個(在發票方面)關係?下面是我迄今:
CREATE TABLE IF NOT EXISTS `booking` (
`booking_id` int(11) NOT NULL AUTO_INCREMENT,
`voucher_id` int(11) NOT NULL,
`pickup_date_time` datetime NOT NULL, ...
PRIMARY KEY (`booking_id`,`voucher_id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;
,然後後來:
CREATE TABLE IF NOT EXISTS `invoice` (
`booking_id` int(11) NOT NULL,
`voucher_id` int(11) NOT NULL,
`invoice_number` int(11) NOT NULL,
`paid` tinyint(1) NOT NULL,
PRIMARY KEY (`booking_id`,`voucher_id`),
UNIQUE KEY `invoice_number` (`invoice_number`),
KEY `voucher_id` (`voucher_id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;
voucher_id
僅僅是別的東西,我在系統中使用。 invoice_number
也是在PHP中生成的,所以這是無關緊要的。
任何幫助將不勝感激!
我應該補充說我討厭任何可爲空的值。所以任何避免NULL的東西都會很棒! – iLikeBreakfast
我沒有看到您當前的設計有任何問題。 –
只是好奇,爲什麼'invoice_number'沒有PK和'booking_id','voucher_id'是一個UNIQUE?似乎有點不合邏輯,你的外鍵可能指向invoice_number? – thaJeztah