This repository has been archived on 2025-07-20. You can view files and clone it, but you cannot make any changes to it's state, such as pushing and creating new issues, pull requests or comments.
fsad/assignment3-databases/sql/assignment.sql
AKP 51d1c5fbb5
Add assignment3 stuff
Signed-off-by: AKP <tom@tdpain.net>
2023-04-22 13:42:42 +01:00

105 lines
5.9 KiB
SQL

CREATE TABLE player (
player_id INTEGER PRIMARY KEY,
player_name VARCHAR(256) NOT NULL,
player_password VARCHAR(256) NOT NULL
);
CREATE TABLE base (
base_id INTEGER PRIMARY KEY,
player_id INTEGER NOT NULL REFERENCES player(player_id),
"level" INTEGER NOT NULL
);
CREATE TABLE currency (
currency_id INTEGER PRIMARY KEY,
currency_name VARCHAR(128) NOT NULL,
premium BOOLEAN NOT NULL DEFAULT false
);
CREATE TABLE "resource" (
resource_id INTEGER PRIMARY KEY,
resource_name VARCHAR(128) NOT NULL
);
CREATE TABLE building (
building_id INTEGER PRIMARY KEY,
building_name VARCHAR(256) NOT NULL,
building_description VARCHAR(512) NOT NULL,
resource_generated INTEGER NOT NULL REFERENCES "resource"(resource_id)
);
CREATE TABLE buildingcost (
building_id INTEGER PRIMARY KEY REFERENCES building(building_id),
resource_id INTEGER NOT NULL REFERENCES "resource"(resource_id),
amount INTEGER NOT NULL,
build_time INTERVAL NOT NULL
);
CREATE TABLE basebuilding (
building_id INTEGER NOT NULL REFERENCES building(building_id),
base_id INTEGER REFERENCES base(base_id)
);
CREATE TABLE constructionqueue (
construction_id INTEGER PRIMARY KEY,
building_id INTEGER NOT NULL REFERENCES building(building_id),
base_id INTEGER NOT NULL REFERENCES base(base_id),
"start_date" DATE NOT NULL
);
CREATE TABLE playercurrency (
player_id INTEGER REFERENCES player(player_id),
currency_id INTEGER NOT NULL REFERENCES currency(currency_id),
amount INTEGER NOT NULL
);
CREATE TABLE playerresource (
player_id INTEGER REFERENCES player(player_id),
resource_id INTEGER NOT NULL REFERENCES "resource"(resource_id),
amount INTEGER NOT NULL
);
INSERT INTO player VALUES (1, 'HarrySmith', 'password1'), (2, 'SophieBrown', 'password2'), (3, 'OliverTaylor', 'password3'), (4, 'FatimaAhmed', 'password4'), (5, 'MohammedAli', 'password5'), (6, 'AishaKhan', 'password6');
INSERT INTO base VALUES (1, 1, 2), (2, 2, 1), (3, 3, 3), (4, 4, 1), (5, 5, 2), (6, 6, 1);
INSERT INTO currency VALUES (1, 'Gold', 'false'), (2, 'Ethereal Silver', 'false'), (3, 'Diamonds', 'true');
INSERT INTO "resource" VALUES (1, 'Food'), (2, 'Wood'), (3, 'Stone'), (4, 'Gold');
INSERT INTO building VALUES (1, 'Farm', 'Produces food for the kingdom', 1), (2, 'Lumber Mill', 'Produces wood for the kingdom', 2), (3, 'Stone Quarry', 'Produces stone for the kingdom', 3), (4, 'Gold Mine', 'Produces gold for the kingdom', 4), (5, 'Marketplace', 'Allows for the exchange of resources between kingdoms', 4);
INSERT INTO buildingcost VALUES (1, 4, 100, '3 days'), (2, 4, 75, '2 days'), (3, 4, 150, '5 days'), (4, 4, 200, '7 days'), (5, 4, 350, '14 days');
INSERT INTO basebuilding VALUES (1, 1), (2, 1), (3, 1), (4, 1), (5, 1), (1, 2), (2, 2), (3, 2), (1, 3), (2, 3), (3, 3), (4, 3), (5, 3), (1, 4), (2, 4), (3, 4), (1, 5), (2, 5), (1, 6), (2, 6), (3, 6), (4, 6);
INSERT INTO constructionqueue VALUES (1, 4, 2, '2023-04-09'), (2, 5, 2, '2023-04-08'), (3, 3, 5, '2023-04-06'), (4, 4, 5, '2023-04-07');
INSERT INTO playercurrency VALUES (1, 1, 100), (1, 2, 50), (1, 3, 10), (2, 1, 200), (2, 2, 100), (2, 3, 20), (3, 1, 50), (3, 2, 20), (3, 3, 5), (4, 1, 150), (4, 2, 75), (5, 1, 75), (5, 2, 30), (5, 3, 8), (6, 1, 300), (6, 2, 150), (6, 3, 50);
INSERT INTO playerresource VALUES (1, 1, 5000), (1, 2, 2500), (1, 3, 1000), (1, 4, 100), (2, 1, 4500), (2, 2, 2000), (2, 3, 500), (2, 4, 50), (3, 1, 6000), (3, 2, 3000), (3, 3, 1500), (3, 4, 200), (4, 1, 4000), (4, 2, 1500), (4, 3, 2000), (4, 4, 300), (5, 1, 5500), (5, 2, 3500), (5, 3, 800), (5, 4, 150), (6, 1, 7000), (6, 2, 4000), (6, 3, 2000), (6, 4, 500);
CREATE VIEW building_info AS
SELECT building.building_name AS "Name",
building.building_description AS "Description",
"resource".resource_name AS "Resources generated",
buildingcost.amount AS "Required gold",
buildingcost.build_time AS "Build time"
FROM building JOIN "resource" ON "resource".resource_id = building.resource_generated
JOIN buildingcost ON buildingcost.building_id = building.building_id;
CREATE VIEW player_buildings AS
SELECT player.player_name AS "Name",
basebuilding.base_id AS "Base ID",
building.building_name AS "Building",
base.level AS "Level"
FROM basebuilding JOIN base ON basebuilding.base_id = base.base_id
JOIN building ON basebuilding.building_id = building.building_id
JOIN player ON base.base_id = player.player_id;
CREATE VIEW player_resources AS
SELECT player.player_name as "Name",
(SELECT amount FROM playerresource AS pr WHERE pr.player_id = player.player_id AND pr.resource_id=(SELECT resource_id FROM "resource" WHERE "resource".resource_name = 'Wood')) AS "Wood amount",
(SELECT amount FROM playerresource AS pr WHERE pr.player_id = player.player_id AND pr.resource_id=(SELECT resource_id FROM "resource" WHERE "resource".resource_name = 'Food')) AS "Food amount",
(SELECT amount FROM playerresource AS pr WHERE pr.player_id = player.player_id AND pr.resource_id=(SELECT resource_id FROM "resource" WHERE "resource".resource_name = 'Stone')) AS "Stone amount"
FROM player;
CREATE VIEW player_currencies AS
SELECT player.player_name as "Name",
(SELECT amount FROM playercurrency AS pc WHERE pc.player_id = player.player_id AND pc.currency_id=(SELECT currency_id FROM currency WHERE currency.currency_name = 'Gold')) AS "Gold amount",
(SELECT amount FROM playercurrency AS pc WHERE pc.player_id = player.player_id AND pc.currency_id=(SELECT currency_id FROM currency WHERE currency.currency_name = 'Ethereal Silver')) AS "Ethereal silver amount",
(SELECT amount FROM playercurrency AS pc WHERE pc.player_id = player.player_id AND pc.currency_id=(SELECT currency_id FROM currency WHERE currency.currency_name = 'Diamonds')) AS "Diamdons amount"
FROM player;