Roermond - Roermond
Adres: Heinsbergerweg, 6045 CK Roermond, Nederland.
Specialiteiten: Zorgcentrum.
Beoordelingen: Dit bedrijf heeft 0 recensies op Google My Business.
Gemiddelde mening: 0/5.
📌 Locatie van Roermond
Welkom bij de Travel Agency Domain Model database in Neo4j. Deze database is ontworpen om een moderne, efficiënte travel planning en booking ervaring te ondersteunen. De structuur is gebouwd rond kernentiteiten zoals Reiziger, Reis, Boeking, Hotel, Vlucht en Activiteit, met relevante relaties tussen hen.
Ontwerp Overzicht
De database architectuur begint met centrale Reizigers knopen, die gerelateerd zijn aan hun Boekingen via een TRAVELS_TO-relatie. Elke Boeking omvat één of meerdere Reizen via een INCLUDES-relatie. Vanuit een Reis kunnen verschillende soorten accommodaties worden gekoppeld: hotels, vliegtuigtickets en activiteiten, zowel direct als via INVOLVES-relaties die een many-to-many cardinaliteit ondersteunen.
Deze opmaak biedt een flexibel fundament voor travel agencys om complexe reisplannen te beheren. De gebruikte relaties zijn:
TRAVELS_TO: Verbindt een Reiziger met een Reis (eensluitend)INCLUDES: Verbindt een Boeking met een Reis (eensluitend vanuit boeking perspectief)INVOLVES: Verbindt een Reis met Hotels, Vluchten en Activiteiten (meerdere kant beide kanten)
Voordelen van dit Ontwerp
Deze structuur biedt verschillende voordelen:
- Efficiënte query's voor bestaande Reizen van een Reiziger via de
TRAVELS_TO-relatie - Rapportage mogelijkheden via
INCLUDES-relaties voor alle inbegrepen Reizen per Boeking - Complexe reiscombinaties kunnen worden geraadpleegd via
INVOLVES-relaties - Update-intensive operationen kunnen worden uitgevoerd, zoals aanpassing van Reis details of toevoegen van nieuwe Activiteiten zonder schema-aanpassingen
Implementatie Met Cypher
Hieronder vindt u een uitgebreide Cypher-script dat het gehele model implementeert, inclusief labelprimaire sleutels voor betere prestaties en enkele voorbeeldgegevens om het concept te illustreren.
// Maak labels aan die unieke primaire sleutels bieden
CREATE CONSTRAINT ON (t:Traveler) ASSERT t.id IS UNIQUE;
CREATE CONSTRAINT ON (b:Booking) ASSERT b.id IS UNIQUE;
CREATE CONSTRAINT ON (r:Trip) ASSERT r.id IS UNIQUE;
CREATE CONSTRAINT ON (h:Hotel) ASSERT h.id IS UNIQUE;
CREATE CONSTRAINT ON (f:Flight) ASSERT f.id IS UNIQUE;
CREATE CONSTRAINT ON (a:Activity) ASSERT a.id IS UNIQUE;
// Maak Traveler knopen aan
CREATE (
t1:Traveler { id: "TRV001", name: "John van der Berg", email: "[email protected]", phone: "+31 6 12345678", address: "Amsterdam, Netherlands" }),
(t2:Traveler { id: "TRV002", name: "Sarah Meijer", email: "[email protected]", phone: "+31 6 87654321", address: "Rotterdam, Netherlands" });
// Maak Trip knopen aan
CREATE (
r1:Trip { id: "TRIP001", destination: "Paris, France", startDate: "2023-07-15", endDate: "2023-07-22", price: 899.99 }),
(r2:Trip { id: "TRIP002", destination: "Tokyo, Japan", startDate: "2023-11-10", endDate: "2023-11-25", price: 1799.99 });
// Maak Booking knopen aan
CREATE (
b1:Booking { id: "BK001", bookingDate: "2023-05-20", status: "Confirmed", totalCost: 899.99 }),
(b2:Booking { id: "BK002", bookingDate: "2023-08-30", status: "Pending", totalCost: 1799.99 });
// Voeg relaties toe tussen Travelers en Trips
MATCH (t1:Traveler { id: "TRV001" }), (r1:Trip { id: "TRIP001" })
CREATE UNIQUE (t1)-[:TRAVELS_TO { date: "2023-06-01" }]->(r1);
MATCH (t2:Traveler { id: "TRV002" }), (r2:Trip { id: "TRIP002" })
CREATE UNIQUE (t2)-[:TRAVELS_TO { date: "2023-09-01" }]->(r2);
// Maak Hotel knopen aan
CREATE (
h1:Hotel { id: "HOT001", name: "Grand Hotel Paris", location: "Paris, France", starRating: 4, pricePerNight: 150.00 }),
(h2:Hotel { id: "HOT002", name: "Hilton Tokyo", location: "Tokyo, Japan", starRating: 5, pricePerNight: 250.00 });
// Maak Flight knopen aan
CREATE (
f1:Flight { id: "FLT001", airline: "Air France", flightNumber: "AF123", departureTime: "2023-07-15T08:00", arrivalTime: "2023-07-15T10:30", price: 200.00 }),
(f2:Flight { id: "FLT002", airline: "Japan Airlines", flightNumber: "JL456", departureTime: "2023-11-10T22:00", arrivalTime: "2023-11-11T09:30", price: 700.00 });
// Maak Activity knopen aan
CREATE (
a1:Activity { id: "ACT001", name: "Eiffel Tower Visit", description: "Guided tour of the Eiffel Tower", date: "2023-07-16", location: "Paris, France", cost: 25.00 }),
(a2:Activity { id: "ACT002", name: "Tokyo Disneyland", description: "Full day pass to Tokyo Disney Resort", date: "2023-11-15", location: "Tokyo, Japan", cost: 450.00 });
// Voeg INVOLVES relaties toe tussen Trips en hun onderdelen
// Paris Trip bestaat uit Hotel, Vlieg en Activiteit
MATCH (r1:Trip { id: "TRIP001" }), (h1:Hotel { id: "HOT001" }), (f1:Flight { id: "FLT001" }), (a1:Activity { id: "ACT001" })
CREATE (r1)-[:INVOLVES]->(h1);
CREATE (r1)-[:INVOLVES]->(f1);
CREATE (r1)-[:INVOLVES]->(a1);
// Tokyo Trip bestaat uit Hotel, Vlieg en Activiteit
MATCH (r2:Trip { id: "TRIP002" }), (h2:Hotel { id: "HOT002" }), (f2:Flight { id: "FLT002" }), (a2:Activity { id: "ACT002" })
CREATE (r2)-[:INVOLVES]->(h2);
CREATE (r2)-[:INVOLVES]->(f2);
CREATE (r2)-[:INVOLVES]->(a2);
// Maak Bookings gerelateerd aan Trips
MATCH (b1:Booking { id: "BK001" }), (r1:Trip { id: "TRIP001" })
CREATE (b1)-[:INCLUDES]->(r1);
MATCH (b2:Booking { id: "BK002" }), (r2:Trip { id: "TRIP002" })
CREATE (b2)-[:INCLUDES]->(r2);
// Voeg Travelers toe aan Bookings
MATCH (t1:Traveler { id: "TRV001" }), (b1:Booking { id: "BK001" })
CREATE (t1)-[:BOOKED_BY]->(b1);
MATCH (t2:Traveler { id: "TRV002" }), (b2:Booking { id: "BK002" })
CREATE (t2)-[:BOOKED_BY]->(b2);
// Controleer de gegevens met een simpele query
RETURN "Database created successfully" AS status;