2013-10-07 78 views
0

我正在進行與預訂機票有關的項目。 我可以在旅客列表中存儲乘客數據,例如姓名,年齡,性別以及車票ID。 但問題是,如果另一張機票爲同一乘客預訂,我將不得不重新輸入相同的乘客數據&,只是機票ID會有所不同。乘客表中多餘的冗餘

mysql> desc passenger; 
+-------+-------------+------+-----+---------+-------+ 
| Field | Type  | Null | Key | Default | Extra | 
+-------+-------------+------+-----+---------+-------+ 
| Name | varchar(32) | NO |  | NULL |  | 
| Age | int(11)  | NO |  | NULL |  | 
| sex | char(1)  | NO |  | NULL |  | 
| PNR | varchar(32) | YES | MUL | NULL |  | 
+-------+-------------+------+-----+---------+-------+ 

任何人請告訴我如何最小化這種冗餘?

任何鏈接,引用,線索或想法都是可觀的。 謝謝

回答

1

您可以存儲由名稱/年齡/性別等組成的乘客實體(在乘客實體表中),然後您的乘客預訂表中將包含乘客實體ID(整數,GUID等)。這是標準化的一種形式

但是,這可能是一個優化太多。無論你是否真的這樣做,都取決於你擁有多少重複實體等等,以及它們是否是真正的性能/管理問題。例如你是否希望爲乘客存儲更多數據(地址,常旅客信息等)。

0

在像mysql這樣的關係型數據庫中,傳送數據和票證數據當然應該放在不同的表中。因此,有一張載有個人詳細信息(如姓名,出生日期,地址,電話等等)的乘客表,並且具有包含ticketNumber,日期等以及passengerId(經典的多對一關係)的票表。

+0

謝謝克林頓的回答,但用戶和乘客都不盡相同。 也可以爲未註冊的用戶預訂票證。 –

0

乘客參數應該屬於乘客表。 工單參數應該屬於工單表。

乘客與機票之間的鏈接只是一個外鍵,如與「id_passenger」鏈接的「fk_passenger」。

0

您可能需要創建一個表Users和Ticket的詳細信息,其中users表將存儲用戶的詳細信息,Ticket_details將存儲票詳細信息。這裏USER_ID將被用作ticket_details表的外鍵(您可以根據您的方便命名此表)

TABLE users 
+---------+-------------+------+-----+---------+---------------+ 
| Field | Type  | Null | Key | Default | Extra   | 
+-------+-------------+------+-----+---------+-----------------+ 
| user_id | int(11)  | NO | PK |   | AutoIncrement | 
| name | varchar(32) | NO |  | NULL |    | 
| age  | int(11)  | NO |  | NULL |    | 
| sex  | char(1)  | NO |  | NULL |    | 
+-------+-------------+------+-----+---------+-----------------+` 


TABLE ticket_details 
+---------+-------------+------+-----+---------+-----------------+ 
| Field | Type  | Null | Key | Default | Extra   | 
+-------+---------------+------+-----+---------+-----------------+ 
| ticket_id | int(11)  | NO | PK |   | AutoIncrement | 
| user_id | int(11)  | NO | FK |   |    | 
| PNR  | varchar(32) | NO |  |   |    | 
+-------+-------------+------+-----+---------+-------------------+