You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
79 lines
3.5 KiB
79 lines
3.5 KiB
<!DOCTYPE html>
|
|
<html lang="en">
|
|
|
|
<head>
|
|
<meta charset="UTF-8">
|
|
<meta http-equiv="X-UA-Compatible" content="IE=edge">
|
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
|
<title>Homework 1: Bird database</title>
|
|
<link rel="stylesheet" href="../style.css">
|
|
<style>
|
|
img {
|
|
border: 1px solid black;
|
|
}
|
|
</style>
|
|
</head>
|
|
|
|
<body>
|
|
<div id="page">
|
|
<h1>Homework 1: Bird database</h1>
|
|
<p>This homework gives pracice with the most important aspects of SQL we covered.</p>
|
|
|
|
<h2>Assignment</h2>
|
|
<p>
|
|
Write commands to implement the database represented in the class diagram below in SQLite. You can use <a href="https://sql.js.org/examples/GUI/">this SQL interpreter</a> or a local installation of SQLite, at your discretion. You will be submitting <strong>all of the SQL commands</strong> to implement the database, as described below.
|
|
</p>
|
|
|
|
<h2>Database design</h2>
|
|
<p>
|
|
<img src="class diagram.png" width="550"><br>
|
|
Implement the database as pictured above. Note that the many-to-many relationship between Species and Regions will require a junction table. Write the following in SQL (invent data as necessary).
|
|
<ul>
|
|
<li>Create all tables
|
|
<ul>
|
|
<li>Use a primary key for each table (a junction table should get a two-column primary key if each pairing should happen at most once)</li>
|
|
<li>Declare foreign key constraints where appropriate</li>
|
|
<li>Declare an index for the SpotterID foreign key column of Sightings</li>
|
|
</ul>
|
|
</li>
|
|
<li>Fill tables with initial data
|
|
<ul>
|
|
<li>Put in at least 6 actual bird species</li>
|
|
<li>Put in the regions: Midwest, Northeast, South, West</li>
|
|
<li>Put in 3 spotters (one of them should be JD - the Math/CS department head who is a birder)</li>
|
|
<li>Put in at least 4 sightings; at least two of them should be by JD</li>
|
|
<li>Associate each bird with the regions it actually lives in</li>
|
|
</ul>
|
|
</li>
|
|
<li>
|
|
Include the following query commands:
|
|
<ul>
|
|
<li>Select the lat, lon, date, and species name for each sighting made by JD.</li>
|
|
<li>Pick some specific bird species and write a query that selects all region names in which it lives.</li>
|
|
</ul>
|
|
</li>
|
|
<li>
|
|
Include the following update command:
|
|
<ul>
|
|
<li>Update some bird's name to its scientific name.</li>
|
|
</ul>
|
|
</li>
|
|
<li>
|
|
Include the following delete command:
|
|
<ul>
|
|
<li>Delete a given spotter by ID and NULL out his/her ID in all of the associated sightings. Do this as a transaction and specify OR ROLLBACK for the commands therein.</li>
|
|
</ul>
|
|
</li>
|
|
</ul>
|
|
</p>
|
|
|
|
<p>Note that in real life, it would likely be useful to have a geospatial index on latitude and longitude. SQLite doesn't support this, but there are <a href="https://www.gaia-gis.it/fossil/libspatialite/index">add-ons</a> and <a href="https://www.linkedin.com/pulse/what-geospatial-index-gaurav-pandey">workarounds</a> (though that is not required for this assignment).</p>
|
|
|
|
<hr>
|
|
<p>Submit a text document with all of your SQL commands in Educat, by November 6, 2024.</p>
|
|
</div>
|
|
|
|
|
|
</body>
|
|
|
|
</html> |