2013-10-07 4 views
0

Я работаю над проектом, связанным с бронированием билетов. Я могу хранить данные о пассажирах, т. Е. Имя, возраст, пол, а также идентификатор билета в пассажирском столе. Но проблема в том, что другой билет забронирован для одного и того же пассажира, мне придется повторно вводить одни и те же данные о пассажирах & только идентификатор билета будет отличаться.Лот избыточности в таблице для пассажиров

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

Вы можете сохранить пассажирское лицо, состоящее из имени/возраста/пола и т. Д. (В таблице пассажирских лиц), а затем таблица бронирования для пассажиров будет содержать только идентификаторы пассажирских объектов (целые числа, идентификаторы GUID и т. Д.). Это форма нормирования .

Однако это может быть оптимизация слишком далеко. Независимо от того, выполняете ли вы это, это зависит от того, сколько у вас дублированных сущностей и т. Д., И являются ли они реальной проблемой производительности/управления для вас. например ожидаете ли вы хранить больше данных для пассажиров (адреса, информацию о часто встречающихся пассажирах и т. д.).

0

В реляционной базе данных, такой как mysql, данные passenget и ticket должны быть в отдельных таблицах. Так что у вас есть стол для пассажиров, который содержит личные данные, такие как Name, DateOfBirth, адрес, телефон и т. Д., А затем есть таблица билетов, в которой есть номер билета, дата и т. Д., А также пассажирское (классическое отношение «многие к одному»).

+0

Спасибо Клинтон за ваш ответ, но пользователь и пассажир не являются одинаковыми. Билет можно забронировать и для незарегистрированного пользователя. –

0

Параметры пассажира должны принадлежать пассажирскому столу. И параметры билета должны принадлежать таблице билета.

Связь между пассажиром и билетом - это только внешний ключ, такой как «fk_passenger», связанный с id_passenger.

0

Возможно, вам понадобится создать таблицы «Пользователи» и «Сведения о билетах», где таблица пользователей будет хранить сведения о пользователях, а 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 |  |   |    | 
+-------+-------------+------+-----+---------+-------------------+