| = Defining Application Queries |
| |
| Let’s try the query-first approach to start designing the data model for |
| a hotel application. The user interface design for the application is |
| often a great artifact to use to begin identifying queries. Let’s assume |
| that you’ve talked with the project stakeholders and your UX designers |
| have produced user interface designs or wireframes for the key use |
| cases. You’ll likely have a list of shopping queries like the following: |
| |
| * Q1. Find hotels near a given point of interest. |
| * Q2. Find information about a given hotel, such as its name and |
| location. |
| * Q3. Find points of interest near a given hotel. |
| * Q4. Find an available room in a given date range. |
| * Q5. Find the rate and amenities for a room. |
| |
| It is often helpful to be able to refer to queries by a shorthand number |
| rather that explaining them in full. The queries listed here are |
| numbered Q1, Q2, and so on, which is how they are referenced in diagrams |
| throughout the example. |
| |
| Now if the application is to be a success, you’ll certainly want |
| customers to be able to book reservations at hotels. This includes steps |
| such as selecting an available room and entering their guest |
| information. So clearly you will also need some queries that address the |
| reservation and guest entities from the conceptual data model. Even |
| here, however, you’ll want to think not only from the customer |
| perspective in terms of how the data is written, but also in terms of |
| how the data will be queried by downstream use cases. |
| |
| You natural tendency as might be to focus first on designing the tables |
| to store reservation and guest records, and only then start thinking |
| about the queries that would access them. You may have felt a similar |
| tension already when discussing the shopping queries before, thinking |
| “but where did the hotel and point of interest data come from?” Don’t |
| worry, you will see soon enough. Here are some queries that describe how |
| users will access reservations: |
| |
| * Q6. Lookup a reservation by confirmation number. |
| * Q7. Lookup a reservation by hotel, date, and guest name. |
| * Q8. Lookup all reservations by guest name. |
| * Q9. View guest details. |
| |
| All of the queries are shown in the context of the workflow of the |
| application in the figure below. Each box on the diagram represents a |
| step in the application workflow, with arrows indicating the flows |
| between steps and the associated query. If you’ve modeled the |
| application well, each step of the workflow accomplishes a task that |
| “unlocks” subsequent steps. For example, the “View hotels near POI” task |
| helps the application learn about several hotels, including their unique |
| keys. The key for a selected hotel may be used as part of Q2, in order |
| to obtain detailed description of the hotel. The act of booking a room |
| creates a reservation record that may be accessed by the guest and hotel |
| staff at a later time through various additional queries. |
| |
| image::data_modeling_hotel_queries.png[image] |
| |
| _Material adapted from Cassandra, The Definitive Guide. Published by |
| O'Reilly Media, Inc. Copyright © 2020 Jeff Carpenter, Eben Hewitt. All |
| rights reserved. Used with permission._ |