Submitted by gwagner on
This article is a section from the book Information Management - An Introduction to Information Modeling and Databases.
In a key-value store, the information items are formed by key-value pairs like the phone number directory entry ⟨"Bob", "(732) 516-8970"⟩ or the English-German translation table row ⟨"my car", "mein Auto"⟩.
Well-known key-value store management systems are Redis, Oracle Berkeley DB and the localStorage that is built into the Web programming language JavaScript.
The key in a key-value pair must be unique. Normally, keys are strings. But a key-value DBMS may allow any value supported by the DBMS (strings, numbers, object references, etc.) to be a key. Normally, the value in a key-value pair may be any value supported by the DBMS.
We show how to deal with key-value pairs and how to manage a key-value
store using JavaScript, which provides a built-in object called
localStorage that allows storing a key-value pair in the
following way:
localStorage["Bob Jennings"] = "(732) 516-8970";
JavaScript programs are loaded and executed in the context of a webpage
defined with HTML (the ). In our key-value store project, we embed the
JavaScript code within the HTML files index.html, add.html, update.html, and
delete.html, corresponding to the data management operations
Retrieve/List All, Create/Add, Update and
Delete. All of these HTML files contain the same navigation menu
(in a nav element), allowing to go to any of these pages for
performing the corresponding data management operation.
2.1. Retrieving All Key-Value Pairs and Listing Them in a Table
The following HTML code contains a heading (the h1 element),
an empty table that will be filled with the help of JavaScript code, a
navigation menu (in the nav element), and a script
element containing the JavaScript code.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
<!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta charset="UTF-8" /> <title>Phone Number Directory</title> </head> <body> <h1>Phone Number Directory</h1> <table> <tbody id="directory"></tbody> </table> <hr/> <nav> <ul> <li><a href="index.html">Home</a></li> <li><a href="add.html">Add an entry</a></li> <li><a href="update.html">Update an entry</a></li> <li><a href="delete.html">Delete an entry</a></li> </ul> </nav> <script> ... </script> </body> </html> |
On this "Home" page of our data management app, the currently stored
key-value pairs are retrieved from localStorage and shown as
table rows. If localStorage is empty, four test data key-value
pairs are created and added to the store. This is done by the following
JavaScript code, which forms the content of the script element:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
<script>
// get a handle for accessing the "directory" table body element
let tableBodyEl = document.getElementById("directory");
// add some key-value pairs if the store is empty
if (localStorage.length === 0) {
localStorage["Bob Jennings"] = "(732) 516-8970";
localStorage["Jane Anselm"] = "(732) 516-4301";
localStorage["Tara Helms"] = "(504) 972-3381";
localStorage["Tom Miller"] = "(282) 664-9357";
}
// show the contents of the store
for (let key of Object.keys( localStorage)) {
let row = tableBodyEl.insertRow();
row.insertCell().textContent = key;
row.insertCell().textContent = localStorage[key];
}
</script>
|
Exercise: Open a text editor of your choice (e.g., NotePad++). First copy and paste the HTML code above into your editor, then add the JavaScript code in the script element. Make a folder (e.g. with name "KeyValueStoreExample") and save the content of your editor window in this folder as "index.html". Then go to this folder (e.g., using Windows Explorer) and open the "index.html" file in a browser. You should see a page containing a table with 4 phone directory entries as in Table 1-1 above.
2.2. Adding a Key-Value Pair in a User Interface
The following HTML code contains a form element (instead of a
table) for allowing the user to enter new key-value pair data in a user
interface. The navigation menu (in the nav element) is the same
as above and is therefore omitted.
The form-based user interface consists of two labeled input fields (named
"key" and "value") and a Save button. Each user interface element
is contained in an HTML p element that defines a layout block
for it.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta charset="UTF-8" />
<title>Phone Number Directory</title>
</head>
<body>
<h1>Phone Number Directory</h1>
<h2>Add an entry</h2>
<form>
<p><label>Name: <input name="key"/></label></p>
<p><label>Phone no.: <input name="value"/></label></p>
<p><button type="button" onclick="save()">Save</button></p>
</form>
<hr/>
<nav>...</nav>
<script>
function save() {
let formEl = document.forms[0]; // the 1st form on the page
localStorage[formEl.key.value] = formEl.value.value;
}
</script>
</body>
</html>
|
The script element only contains the JavaScript code of the
save function, which adds the key-value pair entered in the
form fields "key" and "value" to the localStorage database.
Exercise: Copy and paste the HTML code, including the
script element with its JavaScript code, into a fresh editor
window. Don't forget to insert the content of the nav element
from the previous subsection. Then save the content of the editor window in
your example folder as "add.html". Then open the "add.html" file in a
browser. You should see a page containing a user interface as in Figure 2-1
below. Add a name and a phone number and click the Save button.
Then click on Home in the menu for checking if your new key-value
pair has been added to the store.
Figure 2-1. The user interface of the key-value data management app for the operation Add.
2.3. Deleting a Key-Value Pair
For allowing the user to delete a key-value pair entry from the store, the
user interface must provide a facility for choosing the entry to be dropped.
For this purpose, HTML provides the select element, which is
rendered as a selection field that can be expanded to a list of options to
choose from.
The Delete user interface consists of a labeled selection field (named "key") and a Delete button.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
<!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta charset="UTF-8" /> <title>Phone Number Directory</title> </head> <body> <h1>Phone Number Directory</h1> <h2>Delete an entry</h2> <form> <p><label>Name: <select name="key"></select></label></p> <p><button type="button" onclick="destroy()">Delete</button></p> </form> <hr/> <nav>...</nav> <script>...</script> </body> </html> |
The following script element contains the JavaScript code for
filling the selection list with option elements and the code of
the destroy function, which deletes the selected key-value pair
both from the localStorage store and from the selection list.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
<script>
// get a handle for accessing the form element
let formEl = document.forms[0];
// get a handle for accessing the "key" selection field
let selectEl = formEl.key;
// fill selection list with options
for (let key of Object.keys( localStorage)) {
let optionEl = document.createElement("option");
optionEl.text = key;
selectEl.add( optionEl, null);
}
function destroy() {
// delete from key-value store
localStorage.removeItem( selectEl.value);
// delete also from selection list
selectEl.remove( selectEl.selectedIndex);
}
</script>
|
Exercise: Copy and paste the HTML code into a fresh editor
window. Don't forget to insert both the content of the nav
element (from a code listing above) and the content of the
script element. Save the resulting user interface page in your
example folder as "delete.html". Then open the "delete.html" file in a
browser. You should see a page containing a user interface as in Figure 2-2
below. Choose a name and click the Delete button. Then click on
Home in the menu for checking if the chosen key-value pair has been
deleted from the store.
Figure 2-2. The user interface of the key-value data management app for the operation Delete.
2.4. Updating a Key-Value Pair
The Update user interface consists of a labeled selection field (named "key") for choosing the entry to be updated, an input field (named "value") for entering the value (the phone number), and a Save button.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
<!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta charset="UTF-8" /> <title>Phone Number Directory</title> </head> <body> <h1>Phone Number Directory</h1> <h2>Update an entry</h2> <form> <p><label>Name: <select name="key" onchange="fillForm()"></select></label></p> <p><label>Phone no.: <input name="value"/></label></p> <p><button type="button" onclick="save()">Save</button></p> </form> <hr/> <nav>...</nav> <script>...</script> </body> </html> |
The following script element contains the JavaScript code for
filling the selection list with option elements and the code of
the functions fillForm and save. The function
fillForm is called when a name has been chosen in the selection
field. The save function assigns the updated value from the
input field to the selected key in the localStorage store.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
<script>
// get a handle for accessing the form element
let formEl = document.forms[0];
// get a handle for accessing the "key" selection field
let selectEl = formEl.key;
// fill selection list with options
for (let key of Object.keys( localStorage)) {
let optionEl = document.createElement("option");
optionEl.text = key;
selectEl.add( optionEl, null);
}
// fill form when an entry has been selected
function fillForm() {
formEl.value.value = localStorage[selectEl.value];
}
// save in key-value store
function save() {
localStorage[selectEl.value] = formEl.value.value;
}
</script>
|
Exercise: Copy and paste the HTML code into a fresh editor
window. Don't forget to insert both the content of the nav
element (from a code listing above) and the content of the
script element. Save the resulting user interface page in your
example folder as "update.html". Then open the "update.html" file in a
browser. You should see a page containing a user interface as in Figure 2-3
below. Choose a name such that the associated phone number is shown. Change
this phone number and click the Save button. Then click on
Home in the menu for checking if the chosen key-value pair has been
updated.
Figure 2-3. The user interface of the key-value data management app for the operation Update.

