From a447dd5b711b9b4ddc23b5a94d804dec3d9628e2 Mon Sep 17 00:00:00 2001 From: Edward Gonzalez Date: Fri, 7 Sep 2018 11:22:35 -0400 Subject: [PATCH 1/8] Initial Commit --- README.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/README.md b/README.md index d7fbaa5..71d3e50 100644 --- a/README.md +++ b/README.md @@ -130,3 +130,5 @@ various tables, not just the columns listed here. 6. What SQL keywords or concept would you use if you wanted to automatically delete all messages by a user if that user were deleted from the `user` table? + +# Initial Commit From a3978ba63e266c67d7f211276ed8d9c4b78baadf Mon Sep 17 00:00:00 2001 From: eddygonzalez9708 Date: Fri, 7 Sep 2018 12:11:16 -0400 Subject: [PATCH 2/8] Wrote CREATE TABLE statements for tables organization, channel, user, and message. --- queries.sql | 46 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 46 insertions(+) create mode 100644 queries.sql diff --git a/queries.sql b/queries.sql new file mode 100644 index 0000000..0680ac5 --- /dev/null +++ b/queries.sql @@ -0,0 +1,46 @@ +-- 1. Write CREATE TABLE statements for tables organization, channel, user, and message. + -- i. organization. This table should at least have column(s): + -- name + +CREATE TABLE organization (id SERIAL PRIMARY KEY, name VARCHAR(100) NOT NULL UNIQUE, created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, last_modified TIMESTAMP DEFAULT CURRENT_TIMESTAMP) + +CREATE TRIGGER UPDATE_TIMESTAMP_TRIGGER_FOR_ORGANIZATION +AFTER UPDATE ON organization +BEGIN + UPDATE organization SET TIMESTAMP = STRFTIME('%Y-%m-%d %H:%M:%f', 'NOW') WHERE id = NEW.id; +END; + + -- i. channel. This table should at least have column(s): + -- name + +CREATE TABLE channel (id SERIAL PRIMARY KEY, name VARCHAR(100) NOT NULL UNIQUE, organization_id INTEGER NOT NULL REFERENCES organization(id) ON DELETE CASCADE, created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, last_modified TIMESTAMP CURRENT_TIMESTAMP) + +CREATE TRIGGER UPDATE_TIMESTAMP_TRIGGER_FOR_CHANNEL +AFTER UPDATE ON channel +BEGIN + UPDATE channel SET TIMESTAMP = STRFTIME('%Y-%m-%d %H:%M:%f', 'NOW') WHERE id = NEW.id; +END; + + -- user. This table should at least have column(s): + -- name + +CREATE TABLE user (id SERIAL PRIMARY KEY, username VARCHAR(100) NOT NULL UNIQUE, created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, last_modified TIMESTAMP DEFAULT CURRENT_TIMESTAMP) + +CREATE TRIGGER UPDATE_TIMESTAMP_TRIGGER_FOR_USER +AFTER UPDATE ON user +BEGIN + UPDATE user SET TIMESTAMP = STRFTIME('%Y-%m-%d %H:%M:%f', 'NOW') WHERE id = NEW.id; +END; + + -- message. This table should have at least columns(s): + -- post_time--the timestamp of when the message was posted + -- content--the message content itself + +CREATE TABLE message (id SERIAL PRIMARY KEY, content TEXT, user_id INTEGER REFERENCES user(id) ON DELETE CASCADE, channel_id INTEGER REFERENCES channel(id) ON DELETE CASCADE, post_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP, last_modified TIMESTAMP DEFAULT CURRENT_TIMESTAMP) + +CREATE TRIGGER UPDATE_TIMESTAMP_TRIGGER_FOR_MESSAGE +AFTER UPDATE ON message +BEGIN + UPDATE message SET TIMESTAMP = STRFTIME('%Y-%m-%d %H:%M:%f', 'NOW') WHERE id = NEW.id; +END; + From fd74e780ecbfdc9e53219165fe6b0e7a5d8e3178 Mon Sep 17 00:00:00 2001 From: eddygonzalez9708 Date: Fri, 7 Sep 2018 12:20:11 -0400 Subject: [PATCH 3/8] Changed serial keyword to autoincrement for sqlite databases. Added additional foreign keys needed for created tables. --- queries.sql | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/queries.sql b/queries.sql index 0680ac5..ee26816 100644 --- a/queries.sql +++ b/queries.sql @@ -2,7 +2,7 @@ -- i. organization. This table should at least have column(s): -- name -CREATE TABLE organization (id SERIAL PRIMARY KEY, name VARCHAR(100) NOT NULL UNIQUE, created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, last_modified TIMESTAMP DEFAULT CURRENT_TIMESTAMP) +CREATE TABLE organization (id PRIMARY KEY AUTOINCREMENT, name VARCHAR(100) NOT NULL UNIQUE, created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, last_modified TIMESTAMP DEFAULT CURRENT_TIMESTAMP) CREATE TRIGGER UPDATE_TIMESTAMP_TRIGGER_FOR_ORGANIZATION AFTER UPDATE ON organization @@ -13,7 +13,7 @@ END; -- i. channel. This table should at least have column(s): -- name -CREATE TABLE channel (id SERIAL PRIMARY KEY, name VARCHAR(100) NOT NULL UNIQUE, organization_id INTEGER NOT NULL REFERENCES organization(id) ON DELETE CASCADE, created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, last_modified TIMESTAMP CURRENT_TIMESTAMP) +CREATE TABLE channel (id PRIMARY KEY AUTOINCREMENT, name VARCHAR(100) NOT NULL UNIQUE, organization_id INTEGER NOT NULL REFERENCES organization(id) ON DELETE CASCADE, created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, last_modified TIMESTAMP CURRENT_TIMESTAMP) CREATE TRIGGER UPDATE_TIMESTAMP_TRIGGER_FOR_CHANNEL AFTER UPDATE ON channel @@ -24,7 +24,7 @@ END; -- user. This table should at least have column(s): -- name -CREATE TABLE user (id SERIAL PRIMARY KEY, username VARCHAR(100) NOT NULL UNIQUE, created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, last_modified TIMESTAMP DEFAULT CURRENT_TIMESTAMP) +CREATE TABLE user (id PRIMARY KEY AUTOINCREMENT, username VARCHAR(100) NOT NULL UNIQUE, created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, last_modified TIMESTAMP DEFAULT CURRENT_TIMESTAMP) CREATE TRIGGER UPDATE_TIMESTAMP_TRIGGER_FOR_USER AFTER UPDATE ON user @@ -36,7 +36,7 @@ END; -- post_time--the timestamp of when the message was posted -- content--the message content itself -CREATE TABLE message (id SERIAL PRIMARY KEY, content TEXT, user_id INTEGER REFERENCES user(id) ON DELETE CASCADE, channel_id INTEGER REFERENCES channel(id) ON DELETE CASCADE, post_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP, last_modified TIMESTAMP DEFAULT CURRENT_TIMESTAMP) +CREATE TABLE message (id PRIMARY KEY AUTOINCREMENT, content TEXT, user_id INTEGER REFERENCES user(id) ON DELETE CASCADE, channel_id INTEGER REFERENCES channel(id) ON DELETE CASCADE, post_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP, last_modified TIMESTAMP DEFAULT CURRENT_TIMESTAMP) CREATE TRIGGER UPDATE_TIMESTAMP_TRIGGER_FOR_MESSAGE AFTER UPDATE ON message From 93d08fc33db084c78bc1a74f00b2daf09837f811 Mon Sep 17 00:00:00 2001 From: eddygonzalez9708 Date: Fri, 7 Sep 2018 12:28:28 -0400 Subject: [PATCH 4/8] Added additional join tables needed. --- queries.sql | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/queries.sql b/queries.sql index ee26816..3b2431b 100644 --- a/queries.sql +++ b/queries.sql @@ -44,3 +44,10 @@ BEGIN UPDATE message SET TIMESTAMP = STRFTIME('%Y-%m-%d %H:%M:%f', 'NOW') WHERE id = NEW.id; END; +-- 2. Add additional foreign keys needed to the above tables, if any. +-- 3. Add additional join tables needed, if any. + +CREATE TABLE users_channel (users_id INTEGER REFERENCES user(id) ON DELETE CASCADE, channel_id INTEGER REFERENCES channel(id) ON DELETE CASCADE) + + + From bda325e6c053e36e5ceb5cccad9e44fdea6fee8d Mon Sep 17 00:00:00 2001 From: eddygonzalez9708 Date: Fri, 7 Sep 2018 13:25:19 -0400 Subject: [PATCH 5/8] Inserted queries to add information to the database. --- queries.sql | 40 +++++++++++++++++++++++++++++++++++++--- 1 file changed, 37 insertions(+), 3 deletions(-) diff --git a/queries.sql b/queries.sql index 3b2431b..d2a11f4 100644 --- a/queries.sql +++ b/queries.sql @@ -24,7 +24,7 @@ END; -- user. This table should at least have column(s): -- name -CREATE TABLE user (id PRIMARY KEY AUTOINCREMENT, username VARCHAR(100) NOT NULL UNIQUE, created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, last_modified TIMESTAMP DEFAULT CURRENT_TIMESTAMP) +CREATE TABLE user (id PRIMARY KEY AUTOINCREMENT, first_name VARCHAR(100) NOT NULL, last_name VARCHAR(100) NOT NULL, username VARCHAR(50) NOT NULL UNIQUE, created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, last_modified TIMESTAMP DEFAULT CURRENT_TIMESTAMP) CREATE TRIGGER UPDATE_TIMESTAMP_TRIGGER_FOR_USER AFTER UPDATE ON user @@ -34,9 +34,9 @@ END; -- message. This table should have at least columns(s): -- post_time--the timestamp of when the message was posted - -- content--the message content itself + content--the messa content itself -CREATE TABLE message (id PRIMARY KEY AUTOINCREMENT, content TEXT, user_id INTEGER REFERENCES user(id) ON DELETE CASCADE, channel_id INTEGER REFERENCES channel(id) ON DELETE CASCADE, post_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP, last_modified TIMESTAMP DEFAULT CURRENT_TIMESTAMP) +CREATE TABLE message (id PRIMARY KEY AUTOINCREMEN content TEXT, user_id INTEGER REFERENCES user(id) ON DELETE CASCADE, channel_id INTEGER REFERENCES channel(id) ON DELETE CASCADE, post_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP, last_modified TIMESTAMP DEFAULT CURRENT_TIMESTAMP) CREATE TRIGGER UPDATE_TIMESTAMP_TRIGGER_FOR_MESSAGE AFTER UPDATE ON message @@ -49,5 +49,39 @@ END; CREATE TABLE users_channel (users_id INTEGER REFERENCES user(id) ON DELETE CASCADE, channel_id INTEGER REFERENCES channel(id) ON DELETE CASCADE) +-- 4. Write INSERT queries to add information to the database. + + -- One organization, Lambda School + +INSERT INTO organization (name) VALUES ('Lambda School') + + -- Three users, Alice, Bob, and Chris + +INSERT INTO user (username) VALUES ('Alice', 'Wonderland', 'alice20') +INSERT INTO user (username) VALUES ('Bob', 'Dillan', 'bobby76') +INSERT INTO user (username) VALUES ('Chris', 'Hay', 'chrisp9') + + -- Two channels, #general and #random + +INSERT INTO channel (name, organization_id) VALUES ('#general', 1) +INSERT INTO channel (name, organization_id) VALUES ('#random', 1) + + -- 10 messages (at least one per user, and at least one per channel). + -- Alice should be in #general and #random. + -- Bob should be in #general. + -- Chris should be in #random. + +INSERT INTO message (content, user_id, channel_id) VALUES("I'M THE KING OF THE WORLD", 1, 1); +INSERT INTO message (content, user_id, channel_id) VALUES("OH, you did an actual query. That’s awesome lol", 1, 2); +INSERT INTO message (content, user_id, channel_id) VALUES("Cats are cool.", 2, 1); +INSERT INTO message (content, user_id, channel_id) VALUES("So many repos.", 3, 2); +INSERT INTO message (content, user_id, channel_id) VALUES("Don't worry guys.", 3, 2); +INSERT INTO message (content, user_id, channel_id) VALUES("Why do I type so slow?", 1, 1); +INSERT INTO message (content, user_id, channel_id) VALUES("Two hours of sleep is rough.", 1, 1); +INSERT INTO message (content, user_id, channel_id) VALUES("What's the repo for today?", 2, 1); +INSERT INTO message (content, user_id, channel_id) VALUES("Can you make a PR request please", 2, 1); +INSERT INTO message (content, user_id, channel_id) VALUES("Do you think I will graduate?", 1, 2); + + From 2450efdecf1d923e2b85c3e0bf79caebb2b20584 Mon Sep 17 00:00:00 2001 From: eddygonzalez9708 Date: Fri, 7 Sep 2018 15:30:28 -0400 Subject: [PATCH 6/8] Wrote Select queries. --- lambda-sprintdb.db | Bin 0 -> 45056 bytes queries.sql | 72 +++++++++++++++++++++++++++++++++++---------- 2 files changed, 57 insertions(+), 15 deletions(-) create mode 100644 lambda-sprintdb.db diff --git a/lambda-sprintdb.db b/lambda-sprintdb.db new file mode 100644 index 0000000000000000000000000000000000000000..0043eff0190786f1614b9a3a4defc3b9bb0819c0 GIT binary patch literal 45056 zcmeI*&u`;o8V7JYZsR(c)M!yv%|?iaA5j|7mUKdQriIzTle%rTsZ$bX%Yb$xw{cr* zlDK0#DnTplw(w8zpCCAJ(TAoPIhva+VmQ@EAZ_?+R=@tF&(CI9HOlo21lJwLUsiP>g$>a6QI z*5RS)Gt=H-;Hm{*PAIN5li8+Z~-+`oi28UZc{_Aulv(;`P{vQTz4VYrrhRgZhJL%ke{c# zR@==NXm^vu$h zv(DmQ|G7@*sbjF!yLQ_;u*`OxEQQmzQ)0F@Gj;a2IDyh^sCA!Vh#DtE{5&J^;TJ-q z(GkqP%FwtzCC<*w@bAxDG&}w##Nqy5G&2-4A`UEv3HJwCCCQc01>Klqyc}vkNH7$CWL;X0> z6fI*kqN1gahE;UwRmRqikeq$#CH`IzS>a30H6QfN-oE+JUsH7j{PA)00Izz00bZa0SG_<0uX=z1R(H83*6!-xqPWqHM)CkgBtrsw%xf=T)MST zTv;gIq@|my%ePivDUF#GbneUFbLk2(2k_J9Nd2tWV=5P$##AOHafKmY;|fWV_BK#3%m zl}g+Tj?rt|-G{#1zp}c#{2ZU;p7GZ>G<&9FJbX)lzl#6;|AhQ4C;z}6kRSj72tWV= z5P$##AOHafKmY;|c&r7|?CSvGg@Qy{ct#pt67c)~1^LgM{IUEG_Jjlh2tWV=5P$## zAOHafKmY;|fWU~rYl6tlKAkO<%14gnZW@Dq|M_@jq%Z!J8)IhOPKeyo*IDkn_THM+ z=@`8|dv9-W^G~DeE{&O0=Gn%dW7(CCwQug)>{m-1Rz}X{$N_4mNK7YY&H`K0uX=z1Rwwb2tWV=5P-n%N?0g4 zS-tyIp%d0)ONWlp?i-$YClT#iy|r2_t}b2bfemMAlE`iI66-KFdO>Mj=(uAVt{Jnu%_)&n{PK2>3@`7poikZM$2J|<4taLl7{uMPiYRib#7fdnY&x?0 zj!X6dxgFCyCd(zq?jIg4#yiMzQsh?rqIQo4)V7(GH#j!QwOMiY$(?wGygn&%FY^I= zFYnQb?KlHE><`>UVbrF0smDFAF0S035V?Y1Lc^x6(HjIX@w5AV`-StW@?0_;llIxK z>Mh3H_}^LIe%Fth+U9&v(QT_utj>*nuWxjSRkbr%B+}2T%{Vb#yK7R%?!+vAopt`- z@r^6_ZPGVY+Nx+9R9g?mcWd?P+6ePlq{vG-9T~?c1Rwwb2tWV=5P$##AOHafKmY;!q#}0SG_<0uX=z1Rwwb2teR>C@?u8@Vt Date: Sun, 9 Sep 2018 14:50:48 -0400 Subject: [PATCH 7/8] Completed query to list the count of messages per user channel. --- queries.sql | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/queries.sql b/queries.sql index 73e73fb..27675c2 100644 --- a/queries.sql +++ b/queries.sql @@ -124,6 +124,10 @@ SELECT message.content AS 'All messages in #random by user Bob' FROM user, messa -- List the count of messages across all channels per user. -SELECT user.first_name AS 'User Name', COUNT(message.id) as 'Message Count' FROM user, message where user.id = message.user_id GROUP BY user.first_name; +SELECT user.first_name AS 'User Name', COUNT(message.id) AS 'Message Count' FROM user, message WHERE user.id = message.user_id GROUP BY user.first_name; + -- [Stretch!] List the count of messages per user per channel. + +SELECT user.first_name AS 'User', channel.name AS 'Channel', COUNT(*) AS 'Message Count' FROM user, channel, message WHERE user.id = message.user_id AND message.channel_id = channel.id GROUP BY channel.name, user.first_name; + From c781bb646a0d3830718c9d87ea76978e59d5a0cc Mon Sep 17 00:00:00 2001 From: eddygonzalez9708 Date: Sun, 9 Sep 2018 14:59:07 -0400 Subject: [PATCH 8/8] Complete query to delete all messages by a user if that user were deleted from the user table. --- lambda-sprintdb.db | Bin 45056 -> 45056 bytes queries.sql | 7 +++++++ 2 files changed, 7 insertions(+) diff --git a/lambda-sprintdb.db b/lambda-sprintdb.db index 0043eff0190786f1614b9a3a4defc3b9bb0819c0..2e403573c0452365aca4dd53e5f2e4b3c66a892a 100644 GIT binary patch delta 202 zcmZp8z|`=7X@WGP+C&*=MzxIz3*&kDcQY{Y+cEIh@Z0g*Z59+T;Gb-lU(3S4z~DN0 zf4&nh|5u>=T?YP_{CD~9ZWdHH&p-KYy@WbYo;xuoGdb1BfR~Sxft5F(fnSR6Hs4I% z{k-|SN-zjCkd2oGsK9r!TJK{P{s@K%lX?5xK@8W$5q*pxdsa-2>5l<1JT~v?cNO3V f+xUWk|2_W;5CqzJgMadi^}O65I~kdPBr7KXrerlh delta 202 zcmZp8z|`=7X@WGP>O>i5M%9f83*&hi7#NuO?HKrX^Vjg(Z59+T;Gb-lU(4dm$j&f% zf4&n${w@RmSN@m$cQ*?voadi>w_ZY>i&>g8F()%Q)yM#(go{^+fqw^o1iuvDZN8a& zA$**?`+4(um4F7a@v?Yx0S!~@eazy?4rK85xwAO4u`?`==woDwV*-lA^vAHc0WI9T rr{7h8A7~s4{|g5G-#|Ox^S=Pvd4qrQi}k$REKJOtj7-do%$%G6w@5Ou diff --git a/queries.sql b/queries.sql index 27675c2..e8da5fc 100644 --- a/queries.sql +++ b/queries.sql @@ -131,3 +131,10 @@ SELECT user.first_name AS 'User Name', COUNT(message.id) AS 'Message Count' FROM SELECT user.first_name AS 'User', channel.name AS 'Channel', COUNT(*) AS 'Message Count' FROM user, channel, message WHERE user.id = message.user_id AND message.channel_id = channel.id GROUP BY channel.name, user.first_name; +-- 6. What SQL keywords or concept would you use if you wanted to automatically delete all messages by a user if that user were deleted from the user table? + +PRAGMA FOREIGN_KEYS = ON; + + -- Use must use "ON DELETE CASCADE" when referencing foreign keys in order to delete all messages by a user if that user were deleted from the user table. + +DELETE FROM user WHERE username = 'alice20'; \ No newline at end of file