-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathQuizDB.sql
More file actions
133 lines (107 loc) · 4.31 KB
/
Copy pathQuizDB.sql
File metadata and controls
133 lines (107 loc) · 4.31 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
create database QuizDb;
CREATE LOGIN appuser WITH PASSWORD = 'changepassword';
USE QuizDB;
CREATE USER appuser FOR LOGIN appuser;
ALTER ROLE db_datareader ADD MEMBER appuser;
ALTER ROLE db_datawriter ADD MEMBER appuser;
EXEC sp_helprolemember 'db_datareader';
EXEC sp_helprolemember 'db_datawriter';
use QuizDB;
go
--============================= tabella Users =============================
CREATE TABLE Users (
UserID INT IDENTITY(1,1) PRIMARY KEY,
NomeUtente NVARCHAR(255) NOT NULL,
PasswordHash NVARCHAR(255) NOT NULL, -- salvare hash della password
Email NVARCHAR(255) NULL,
DataCreazione DATETIME NOT NULL DEFAULT GETDATE()
);
GO
ALTER TABLE Users
ADD CONSTRAINT UQ_Users_NomeUtente UNIQUE (NomeUtente);
GO
ALTER TABLE Users
ADD Salt NVARCHAR(255) NOT NULL DEFAULT '';
ALTER TABLE Users
ADD Ruolo NVARCHAR(50) NOT NULL DEFAULT '1';
GO
GO
-- ============================= tabella Quiz =============================
CREATE TABLE Quiz (
QuizID INT IDENTITY(1,1) PRIMARY KEY,
UserID INT NOT NULL, -- proprietario del quiz
Nome NVARCHAR(255) NOT NULL,
ValoriDifficolta NVARCHAR(MAX) NULL, -- JSON o stringa da parsare
Pubblico BIT NOT NULL DEFAULT 0, -- 0 = privato, 1 = pubblico
CONSTRAINT FK_Quiz_User FOREIGN KEY (UserID) REFERENCES Users(UserID)
);
ALTER TABLE Quiz
ADD CONSTRAINT UQ_Quiz_Nome UNIQUE (Nome);
GO
--============================= tabella Domanda =============================
CREATE TABLE Domanda (
DomandaID INT IDENTITY(1,1) PRIMARY KEY,
QuizID INT NOT NULL,
Testo NVARCHAR(MAX) NOT NULL,
RisposteGiuste NVARCHAR(MAX) NOT NULL,
RisposteSbagliate NVARCHAR(MAX) NOT NULL,
TempoRisposta INT NULL,
Sequenza NVARCHAR(100) NULL,
NumeroSequenza INT NULL,
Variante NVARCHAR(100) NULL,
Difficolta NVARCHAR(50) NULL,
CONSTRAINT FK_Domanda_Quiz FOREIGN KEY (QuizID) REFERENCES Quiz(QuizID)
);
GO
-- ============================= tabella QuizSeed =============================
CREATE TABLE QuizSeed (
QuizSeedID INT IDENTITY(1,1) PRIMARY KEY,
QuizID INT NOT NULL,
UserID INT NOT NULL, -- proprietario del quizseed
Nome NVARCHAR(255) NOT NULL,
NumeroDomande INT NOT NULL,
Modalita NVARCHAR(50) NOT NULL, -- Sfida / Verifica
TempoTotale INT NULL,
SommaTempoDomande BIT NULL,
PossibilitaTornareIndietro BIT NULL,
PossibilitaScartoTempo BIT NULL,
Pubblico BIT NOT NULL DEFAULT 0, -- 0 = privato, 1 = pubblico
CONSTRAINT FK_QuizSeed_Quiz FOREIGN KEY (QuizID) REFERENCES Quiz(QuizID),
CONSTRAINT FK_QuizSeed_User FOREIGN KEY (UserID) REFERENCES Users(UserID)
);
GO
-- ============================= tabella Scoreboard =============================
CREATE TABLE Scoreboard (
ScoreboardID INT IDENTITY(1,1) PRIMARY KEY,
QuizSeedID INT NOT NULL, -- riferimento alla configurazione pull
QuizID INT NOT NULL, -- riferimento al quiz originale
UserID INT NOT NULL, -- giocatore che ha fatto il quiz
Punteggio INT NOT NULL,
DataSessione DATETIME NOT NULL DEFAULT GETDATE(),
Media FLOAT NULL,
CONSTRAINT FK_Scoreboard_QuizSeed FOREIGN KEY (QuizSeedID) REFERENCES QuizSeed(QuizSeedID),
CONSTRAINT FK_Scoreboard_Quiz FOREIGN KEY (QuizID) REFERENCES Quiz(QuizID),
CONSTRAINT FK_Scoreboard_User FOREIGN KEY (UserID) REFERENCES Users(UserID)
);
GO
-- ============================= tabella Pull =============================
CREATE TABLE Pull (
PullID INT IDENTITY(1,1) PRIMARY KEY,
QuizID INT NOT NULL,
QuizSeedID INT NULL,
Nome NVARCHAR(255) NOT NULL,
DataCreazione DATETIME NOT NULL DEFAULT GETDATE(),
CONSTRAINT FK_Pull_Quiz FOREIGN KEY (QuizID) REFERENCES Quiz(QuizID),
CONSTRAINT FK_Pull_QuizSeed FOREIGN KEY (QuizSeedID) REFERENCES QuizSeed(QuizSeedID)
);
GO
-- ============================= tabella PullDomande (relazione molti-a-molti) =============================
CREATE TABLE PullDomande (
PullDomandeID INT IDENTITY(1,1) PRIMARY KEY,
PullID INT NOT NULL,
DomandaID INT NOT NULL,
CONSTRAINT FK_PullDomande_Pull FOREIGN KEY (PullID) REFERENCES Pull(PullID),
CONSTRAINT FK_PullDomande_Domanda FOREIGN KEY (DomandaID) REFERENCES Domanda(DomandaID),
CONSTRAINT UQ_PullDomande UNIQUE (PullID, DomandaID)
);
GO