SitesMastic,
Yes the problem you have is a classic, age-old relational database issue.
No, the data does NOT need to stay in a single table, and this is why the 400 fields issue you are facing is the problem.
What a relational database does, is allows you to break "logical" pieces together. Consider that with your current approach, only 1 person books 10 times in a row. Now you have a 400 field table that has only "used" around 70 fields of the 400. That means the rest are "blank" values, but still taking up space, as well as adding complexity to the table. (Funny, sometimes the "simple" solutions are actually complexity in disguise, such as your case).
So what you might have is a master table called Reservation. That table holds the main details about the reservation. (And "ReservationNum" becomes your Primary Key across all your child tables). It also has things like, which cabin, what dates for check in and check out, all the things "unique" to that part of the reservation that don't need to be repeated in every subsequent table. Only the Primary Key (Reservation Number) is repeated and becomes the primary key. This also has all those costs associated with the reservation you have detailed, so it's your "Parent Table". All the other relations to this table are then "Child Tables".
Then you have a passenger table. For any one reservation, this will hold data for EACH passenger for that reservation. A new record each time. That will have things like PassengerID, First Name, Last Name, IDType, IDNumber, Age, birthday (you know stuff you might want to use in marketing to that person later, or while on the trip). You can keep things like PassengerID for them forever, in future reservations you'll already have data for them like Contact Details(See next table).
Then you have another table that is Contacts. This table will have the address for the passenger and will be linked by their PassengerID. You can then keep that ID for them forever, in future reservations you'll already have data for them like Address. You can also have things like phone number, email address and rather than making this complex and adding another child, just go a little overboard here and have a couple of phone number fields, (Home, mobile, work, alternate), and email fields like (Work, personal). We could normalize this table further, but for your purpose this is probably as far as you need to go.
Then you have a "Baggage" table, which ID's and tracks their baggage. The relationship then is "ReservationID+PassengerID+BaggageID" This will always allow you to uniquely find the record, and the 5 limit is no longer a limit. They can have 0 bags, 15 bags, doesn't matter, each gets its own record, and however you want to track it.
This would make managing your data infinitely easier, and your limitations on records and speed of the application will be vastly improved.
See, this is why I asked at the start "What are you trying to achieve". It's usually best on this site to pose the problem you face, and what you want to achieve, rather than posing the solution and say "How do I do it this way". Just something to think about.
We're better at solving the problem when we a) know the problem and b) then know what you're trying to achieve.
As we say in Japan, Gambate. (Battle on).
Best Regards,
Scott
MSc ISM, MIET, MASHRAE, CDCAP, CDCP, CDCS, CDCE, CTDC, CTIA, ATS, ATD
"I try to be nice, but sometimes my mouth doesn't cooperate.