relational-schema: lotb_ddl.sql

File lotb_ddl.sql, 3.7 KB (added by 181557, 10 days ago)
Line 
1DROP TABLE IF EXISTS Character_Guild, Trader_Item, Enemy_Item, Character_Item, Character_Quest, Market, Trader, Enemy, Item, Quest, Reputation, Faction, Character, Guild, Player CASCADE;
2
3CREATE TABLE Player (
4 PlayerID SERIAL PRIMARY KEY,
5 Username VARCHAR(50) UNIQUE NOT NULL,
6 Email VARCHAR(100) UNIQUE NOT NULL,
7 Password TEXT NOT NULL
8);
9
10CREATE TABLE Character (
11 CharacterID SERIAL PRIMARY KEY,
12 PlayerID INT NOT NULL,
13 Name VARCHAR(50) UNIQUE NOT NULL,
14 Health INT NOT NULL DEFAULT 100,
15 EXP INT NOT NULL DEFAULT 0,
16 Gold INT NOT NULL DEFAULT 0,
17 FOREIGN KEY (PlayerID) REFERENCES Player(PlayerID) ON DELETE CASCADE
18);
19
20CREATE TABLE Faction (
21 FactionID SERIAL PRIMARY KEY,
22 Name VARCHAR(50) UNIQUE NOT NULL,
23 Description TEXT NOT NULL
24);
25
26CREATE TABLE Reputation (
27 CharacterID INT NOT NULL,
28 FactionID INT NOT NULL,
29 ReputationPoints INT NOT NULL DEFAULT 0,
30 Rank VARCHAR(50) NOT NULL,
31 PRIMARY KEY (CharacterID, FactionID),
32 FOREIGN KEY (CharacterID) REFERENCES Character(CharacterID) ON DELETE CASCADE,
33 FOREIGN KEY (FactionID) REFERENCES Faction(FactionID) ON DELETE CASCADE
34);
35
36CREATE TABLE Quest (
37 QuestID SERIAL PRIMARY KEY,
38 Name VARCHAR(100) NOT NULL,
39 EXP_Required INT NOT NULL DEFAULT 0,
40 EXP_Reward INT NOT NULL,
41 Gold_Reward INT NOT NULL
42);
43
44CREATE TABLE Item (
45 ItemID SERIAL PRIMARY KEY,
46 Name VARCHAR(100) NOT NULL,
47 Type VARCHAR(50) NOT NULL,
48 Rarity VARCHAR(20) NOT NULL,
49 Craftable BOOLEAN NOT NULL DEFAULT FALSE
50);
51
52CREATE TABLE Enemy (
53 EnemyID SERIAL PRIMARY KEY,
54 Name VARCHAR(100) NOT NULL,
55 Health INT NOT NULL,
56 Damage INT NOT NULL,
57 LootDrop BOOLEAN NOT NULL DEFAULT FALSE
58);
59
60CREATE TABLE Trader (
61 TraderID SERIAL PRIMARY KEY,
62 Name VARCHAR(100) NOT NULL,
63 Type VARCHAR(50) NOT NULL
64);
65
66CREATE TABLE Market (
67 MarketID SERIAL PRIMARY KEY,
68 ItemID INT NOT NULL,
69 SellerID INT NOT NULL,
70 Price INT NOT NULL CHECK (Price >= 0),
71 FOREIGN KEY (ItemID) REFERENCES Item(ItemID) ON DELETE CASCADE,
72 FOREIGN KEY (SellerID) REFERENCES Player(PlayerID) ON DELETE CASCADE
73);
74
75CREATE TABLE Guild (
76 GuildID SERIAL PRIMARY KEY,
77 Name VARCHAR(100) UNIQUE NOT NULL,
78 LeaderID INT NOT NULL,
79 FOREIGN KEY (LeaderID) REFERENCES Player(PlayerID) ON DELETE SET NULL
80);
81
82CREATE TABLE Character_Quest (
83 CharacterID INT NOT NULL,
84 QuestID INT NOT NULL,
85 PRIMARY KEY (CharacterID, QuestID),
86 FOREIGN KEY (CharacterID) REFERENCES Character(CharacterID) ON DELETE CASCADE,
87 FOREIGN KEY (QuestID) REFERENCES Quest(QuestID) ON DELETE CASCADE
88);
89
90CREATE TABLE Character_Item (
91 CharacterID INT NOT NULL,
92 ItemID INT NOT NULL,
93 PRIMARY KEY (CharacterID, ItemID),
94 FOREIGN KEY (CharacterID) REFERENCES Character(CharacterID) ON DELETE CASCADE,
95 FOREIGN KEY (ItemID) REFERENCES Item(ItemID) ON DELETE CASCADE
96);
97
98CREATE TABLE Enemy_Item (
99 EnemyID INT NOT NULL,
100 ItemID INT NOT NULL,
101 PRIMARY KEY (EnemyID, ItemID),
102 FOREIGN KEY (EnemyID) REFERENCES Enemy(EnemyID) ON DELETE CASCADE,
103 FOREIGN KEY (ItemID) REFERENCES Item(ItemID) ON DELETE CASCADE
104);
105
106CREATE TABLE Trader_Item (
107 TraderID INT NOT NULL,
108 ItemID INT NOT NULL,
109 PRIMARY KEY (TraderID, ItemID),
110 FOREIGN KEY (TraderID) REFERENCES Trader(TraderID) ON DELETE CASCADE,
111 FOREIGN KEY (ItemID) REFERENCES Item(ItemID) ON DELETE CASCADE
112);
113
114CREATE TABLE Character_Guild (
115 CharacterID INT NOT NULL,
116 GuildID INT NOT NULL,
117 PRIMARY KEY (CharacterID, GuildID),
118 FOREIGN KEY (CharacterID) REFERENCES Character(CharacterID) ON DELETE CASCADE,
119 FOREIGN KEY (GuildID) REFERENCES Guild(GuildID) ON DELETE CASCADE
120);