2013-10-07 51 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 |  |   |    | 
+-------+-------------+------+-----+---------+-------------------+