mirror of https://github.com/apache/cassandra
63 lines
3.0 KiB
ReStructuredText
63 lines
3.0 KiB
ReStructuredText
.. Licensed to the Apache Software Foundation (ASF) under one
|
||
.. or more contributor license agreements. See the NOTICE file
|
||
.. distributed with this work for additional information
|
||
.. regarding copyright ownership. The ASF licenses this file
|
||
.. to you under the Apache License, Version 2.0 (the
|
||
.. "License"); you may not use this file except in compliance
|
||
.. with the License. You may obtain a copy of the License at
|
||
..
|
||
.. http://www.apache.org/licenses/LICENSE-2.0
|
||
..
|
||
.. Unless required by applicable law or agreed to in writing, software
|
||
.. distributed under the License is distributed on an "AS IS" BASIS,
|
||
.. WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||
.. See the License for the specific language governing permissions and
|
||
.. limitations under the License.
|
||
|
||
.. conceptual_data_modeling
|
||
|
||
Conceptual Data Modeling
|
||
^^^^^^^^^^^^^^^^^^^^^^^^
|
||
|
||
First, let’s create a simple domain model that is easy to understand in
|
||
the relational world, and then see how you might map it from a relational
|
||
to a distributed hashtable model in Cassandra.
|
||
|
||
Let's use an example that is complex enough
|
||
to show the various data structures and design patterns, but not
|
||
something that will bog you down with details. Also, a domain that’s
|
||
familiar to everyone will allow you to concentrate on how to work with
|
||
Cassandra, not on what the application domain is all about.
|
||
|
||
For example, let's use a domain that is easily understood and that
|
||
everyone can relate to: making hotel reservations.
|
||
|
||
The conceptual domain includes hotels, guests that stay in the hotels, a
|
||
collection of rooms for each hotel, the rates and availability of those
|
||
rooms, and a record of reservations booked for guests. Hotels typically
|
||
also maintain a collection of “points of interest,” which are parks,
|
||
museums, shopping galleries, monuments, or other places near the hotel
|
||
that guests might want to visit during their stay. Both hotels and
|
||
points of interest need to maintain geolocation data so that they can be
|
||
found on maps for mashups, and to calculate distances.
|
||
|
||
The conceptual domain is depicted below using the entity–relationship
|
||
model popularized by Peter Chen. This simple diagram represents the
|
||
entities in the domain with rectangles, and attributes of those entities
|
||
with ovals. Attributes that represent unique identifiers for items are
|
||
underlined. Relationships between entities are represented as diamonds,
|
||
and the connectors between the relationship and each entity show the
|
||
multiplicity of the connection.
|
||
|
||
.. image:: images/data_modeling_hotel_erd.png
|
||
|
||
Obviously, in the real world, there would be many more considerations
|
||
and much more complexity. For example, hotel rates are notoriously
|
||
dynamic, and calculating them involves a wide array of factors. Here
|
||
you’re defining something complex enough to be interesting and touch on
|
||
the important points, but simple enough to maintain the focus on
|
||
learning Cassandra.
|
||
|
||
*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.* |