C#C
C#5mo ago
Emilija

Database Design

Hello everyone, I'm building a travel reservation system and need help deciding between two approaches for modeling package details.

I already have:
TravelPackage (base class/table): common fields like PackageID, Name, Price, PackageType
Subtypes like:
SeaPackage MountainPackage CruisePackage ExcursionPackage
Each subtype has its own specific fields (e.g. Activities, Ship, Guide, etc). Now I’m unsure which design is better:

Option 1: Inheritance
Make each subtype extend TravelPackage using single-table or joined-table inheritance. That way, each specialized package is a real subclass of TravelPackage.

Option 2: Composition
Keep TravelPackage as a standalone entity and have a related PackageDetails entity (or 4 separate ones) that hold the specific fields. The PackageType would determine which detail table to join.

Option 1:
Client(ClientID PK, FirstName, LastName, PassportNo, BirthDate, Email, Phone) TravelPackage(PackageID PK, Name, Price, PackageType) SeaPackage(PackageID PK/FK→TravelPackage, Destination, TransportType, LodgingType) MountainPackage(PackageID PK/FK→TravelPackage, Destination, TransportType, LodgingType, Activities) Excursion(PackageID PK/FK→TravelPackage, Destination, TransportType, Guide, Duration) Cruise(PackageID PK/FK→TravelPackage, Ship, Route, DepartureDate, CabinType) Reservation(ReservationID PK, ClientID FK→Client, PackageID FK→TravelPackage, BookingDate, ...)

Option 2:
Client(ID PK, FirstName, LastName, PassportNo, BirthDate, Email, Phone) Packages(ID PK, Name, Price, DetailsID FK->PackageDetails) PackageDetails(ID PK, PackageDetailsTypeID( fk -> PackageTypes) ) PackageDetailsTypes(ID, PK, Name) BeachPackageDetails(ID PK, FK -> PackageDetails, DestinationID, TransportTypeID, AccommodationTypeID )
And for the rest of them..

Which option is better, and how would i contruct my entities and repositories? Will i have inheritance in every case(1.For packages, 2.For PackageDetails)? Thank you in advance ❤️
Was this page helpful?