From 1cda7cceb13852acfd6c1d61877c34f020d092e3 Mon Sep 17 00:00:00 2001 From: Michael Kowalczyk Date: Wed, 30 Oct 2024 09:27:41 -0400 Subject: [PATCH] Hwk 1 --- Day 24-27 (database)/indexes.txt | 39 +++++++++++++ Day 24-27 (database)/transactions.txt | 53 +++++++++++++++++ Homework/01/birdDatabase.puml | 35 ++++++++++++ Homework/01/class diagram.png | Bin 0 -> 15858 bytes Homework/01/index.html | 79 ++++++++++++++++++++++++++ Homework/style.css | 75 ++++++++++++++++++++++++ Labs/02/index.html | 1 + 7 files changed, 282 insertions(+) create mode 100644 Day 24-27 (database)/indexes.txt create mode 100644 Day 24-27 (database)/transactions.txt create mode 100644 Homework/01/birdDatabase.puml create mode 100644 Homework/01/class diagram.png create mode 100644 Homework/01/index.html create mode 100644 Homework/style.css diff --git a/Day 24-27 (database)/indexes.txt b/Day 24-27 (database)/indexes.txt new file mode 100644 index 0000000..f2b7494 --- /dev/null +++ b/Day 24-27 (database)/indexes.txt @@ -0,0 +1,39 @@ +Indexes +======= +* An index is a data structure (usually a B-tree) for fast column lookups. + +* You don't need to (and probably shouldn't) put an index on every column, but if for example a column is used in the WHERE clause of an SQL statement, you should consider adding an index to that column. + +* If a table is not indexed, queries may go slow because the database may have to do a full table scan (i.e. linear search). + +CREATE TABLE RandomData( + ID INTEGER PRIMARY KEY, + Num FLOAT NOT NULL +); + +INSERT INTO RandomData(Num) VALUES (RANDOM()); +INSERT INTO RandomData(Num) VALUES (RANDOM()); +INSERT INTO RandomData(Num) VALUES (RANDOM()); +INSERT INTO RandomData(Num) VALUES (RANDOM()); +INSERT INTO RandomData(Num) VALUES (RANDOM()); +INSERT INTO RandomData(Num) VALUES (RANDOM()); +INSERT INTO RandomData(Num) VALUES (RANDOM()); + +SELECT * FROM RandomData; + +INSERT INTO RandomData(Num) SELECT a.Num/b.Num AS Num FROM RandomData AS a JOIN RandomData AS b ON a.ID != b.ID; +INSERT INTO RandomData(Num) SELECT a.Num/b.Num AS Num FROM RandomData AS a JOIN RandomData AS b ON a.ID != b.ID; +INSERT INTO RandomData(Num) SELECT a.Num/b.Num AS Num FROM RandomData AS a JOIN RandomData AS b ON a.ID != b.ID; + +SELECT COUNT(*) FROM RandomData; +SELECT * FROM RandomData WHERE ID=1234567; /* SQLite automatically puts an index on PRIMARY KEY and UNIQUE columns */ +SELECT * FROM RandomData WHERE Num>=.998 AND Num<=.999; /* Not indexed; it takes a second. */ + +CREATE INDEX Idx_RandomData_Num ON RandomData(Num); /* Naming convention for an index: Idx_TableName_ColumnName; */ + +SELECT * FROM RandomData WHERE Num>=.998 AND Num<=.999; + +DROP INDEX Idx_RandomData_Num; + +SELECT * FROM RandomData LIMIT 10; + diff --git a/Day 24-27 (database)/transactions.txt b/Day 24-27 (database)/transactions.txt new file mode 100644 index 0000000..77f09c0 --- /dev/null +++ b/Day 24-27 (database)/transactions.txt @@ -0,0 +1,53 @@ +Transactions +============ +A transaction is a sequence of statements that are treated as one unit; either all of them occur or none of them. + +Syntax and features vary somewhat based on the DBMS. + +Classic example: moving money from one bank account to another. + +Autocommit mode: + Every statement is treated as a transaction of its own. + Most DBMSs have autocommit mode on by default. + +To do a multi-statement transaction: BEGIN...COMMIT + +Systems support various means to explicitly ROLLBACK a transaction using if statements, etc. + +SQLite Example: +--------------- +CREATE TABLE Customers( + CustomerID INTEGER PRIMARY KEY, + Name TEXT NOT NULL +); + +CREATE TABLE Accounts( + AccountID INTEGER PRIMARY KEY, + CustomerID INTEGER NOT NULL, + Balance INTEGER NOT NULL, + FOREIGN KEY (CustomerID) REFERENCES Customers(CustomerID), + CHECK (Balance >= 0) /* Enforces a constraint that no account may be overdrawn. */ +); + +INSERT INTO Customers (Name) VALUES("DrKow"); +INSERT INTO Accounts (CustomerID, Balance) VALUES(1,1000); +INSERT INTO Accounts (CustomerID, Balance) VALUES(1,2000); + +/* This statement is a single-line transaction; since it failed for one row, it will not modify any rows. */ +UPDATE Accounts SET Balance = Balance - 1500; + +BEGIN; + UPDATE OR ROLLBACK Accounts SET Balance = Balance + 50 WHERE AccountID=1; + UPDATE OR ROLLBACK Accounts SET Balance = Balance / 0 WHERE AccountID=1; /* This makes it crash, but the transaction is safely rolled back. */ + UPDATE OR ROLLBACK Accounts SET Balance = Balance - 50 WHERE AccountID=2; +COMMIT; + +/* The following command will also be rolled back, because the non-negative balance constraint would be violated. */ +BEGIN; + UPDATE OR ROLLBACK Accounts SET Balance = Balance + 5000 WHERE AccountID=1; + UPDATE OR ROLLBACK Accounts SET Balance = Balance - 5000 WHERE AccountID=2; +COMMIT; + +/* Note that the "OR ROLLBACK" part is required in SQLite; if you run the command above without it, 5000 will be added to one account without deducting it from the other. */ + +SELECT Name,AccountID,Balance FROM Customers JOIN Accounts ON Customers.CustomerID=Accounts.CustomerID; diff --git a/Homework/01/birdDatabase.puml b/Homework/01/birdDatabase.puml new file mode 100644 index 0000000..7a8fd96 --- /dev/null +++ b/Homework/01/birdDatabase.puml @@ -0,0 +1,35 @@ +'Created with https://www.planttext.com/ + +@startuml + +skin rose + +title Bird database + +class Species { + SpeciesID + Name +} + +class Regions { + RegionID + Name +} + +class Sightings { + SightingID + Latitude + Longitude + Date +} + +class Spotters { + SpotterID + Name +} + +Regions -right- Species: "0..* 0..*" +Species -right- Sightings: "1 0..*" +Sightings -right- Spotters: "0..* 0..1" + +@enduml diff --git a/Homework/01/class diagram.png b/Homework/01/class diagram.png new file mode 100644 index 0000000000000000000000000000000000000000..8c5d3d15633ce8e9ce2c3325a4f65d0dccf570f5 GIT binary patch literal 15858 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 Qd=2wfSX`(;K-2600NP?z`~Uy| literal 0 HcmV?d00001 diff --git a/Homework/01/index.html b/Homework/01/index.html new file mode 100644 index 0000000..2f148ff --- /dev/null +++ b/Homework/01/index.html @@ -0,0 +1,79 @@ + + + + + + + + Homework 1: Bird database + + + + + +
+

Homework 1: Bird database

+

This homework gives pracice with the most important aspects of SQL we covered.

+ +

Assignment

+

+ Write commands to implement the database represented in the class diagram below in SQLite. You can use this SQL interpreter or a local installation of SQLite, at your discretion. You will be submitting all of the SQL commands to implement the database, as described below. +

+ +

Database design

+

+
+ 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). +

    +
  • Create all tables +
      +
    • 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)
    • +
    • Declare foreign key constraints where appropriate
    • +
    • Declare an index for the SpotterID foreign key column of Sightings
    • +
    +
  • +
  • Fill tables with initial data +
      +
    • Put in at least 6 actual bird species
    • +
    • Put in the regions: Midwest, Northeast, South, West
    • +
    • Put in 3 spotters (one of them should be JD - the Math/CS department head who is a birder)
    • +
    • Put in at least 4 sightings; at least two of them should be by JD
    • +
    • Associate each bird with the regions it actually lives in
    • +
    +
  • +
  • + Include the following query commands: +
      +
    • Select the lat, lon, date, and species name for each sighting made by JD.
    • +
    • Pick some specific bird species and write a query that selects all region names in which it lives.
    • +
    +
  • +
  • + Include the following update command: +
      +
    • Update some bird's name to its scientific name.
    • +
    +
  • +
  • + Include the following delete command: +
      +
    • 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.
    • +
    +
  • +
+

+ +

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 add-ons and workarounds (though that is not required for this assignment).

+ +
+

Submit a text document with all of your SQL commands in Educat, by November 6, 2024.

+
+ + + + + \ No newline at end of file diff --git a/Homework/style.css b/Homework/style.css new file mode 100644 index 0000000..4387f32 --- /dev/null +++ b/Homework/style.css @@ -0,0 +1,75 @@ +.tab { + padding-left: 15px; +} + +body { + background-color: #ffffb0; + margin: 0; + padding: 0; +} + +#page { + margin-left: 30px; + margin-right: 30px; + margin-top: 10px; + margin-bottom: 10px; + background-color: #fffff0; + padding: 7px; + border-style: double; + border-color: #000000; + border-width: 3px; +} + +.underline { + text-decoration: underline; +} + +img { + max-width: 100%; + height: auto; + border: 1px solid black; +} + +/* This is so code samples look reasonable */ +pre { + -moz-tab-size: 4; + -o-tab-size: 4; + tab-size: 4; + overflow-x: auto; + border-width: 1px; + border-color: black; + border-style: solid; + background-color: white; + padding: 4px; +} + +blockquote { + border-width: 1px; + border-color: black; + border-style: solid; + background-color: white; + padding: 4px; +} + +.output { + border-width: 3px; + border-style: double; + border-color: white; + background-color: #000000; + color: #ffffff; + padding: 3px; +} + +img { + max-width: 100%; +} + +table { + border-collapse: collapse; +} + +td, th { + border: 1px solid black; + padding: 4px; + background-color: white; +} \ No newline at end of file diff --git a/Labs/02/index.html b/Labs/02/index.html index 3d11820..004e8d7 100644 --- a/Labs/02/index.html +++ b/Labs/02/index.html @@ -43,6 +43,7 @@
  • git commit - makes a new commit.
  • git branch branchName - makes a new branch.
  • +
  • git branch -f branchName target - forces the given branch to move to the target commit or branch.
  • git checkout branchName - changes to the given branch.
  • git checkout -b branchName - creates and changes to the given branch.
  • git merge branchName - merges the given branch in with the current one.