Crezione tabelle per segnalazioni

venerdì 18 dicembre 2009 - 12.37

Ely84 Profilo | Newbie

Ciao a tutti, devo costruire un database. Vi spiego concettualmente cosa devo realizzare.
Vorrei gestire l'invio e le risposte delle segnalazioni di problema dei siti che realizzo.
I clienti hanno accesso al mio DB attraverso una pagina asp.net del loro sito.

Vi faccio un esempio:

Cliente: Non funziona il bottone X.
Admin: Si ci sto lavorando.
Cliente: Ancora non funziona.
Admin: Adesso si
Cliente: Hai ragione, grazie e ciao.[chiusa segnalazione]

Cliente2: Non mi stampa il report
Admin: Prova ora
Cliente2: tutto ok [chiusa segnalazione]

Cliente3: Vorrei aqua come colore di sfondo
Cliente3: Presto!!!
Admin: Fatto
Cliente3: Ancora non lo hai fatto! [segnalazione pending]

Praticamente il cliente nella sua pagina vedrà una tabella (gridview) con
delle righe dove la prima riga è la sua segnalazione, la seconda sarà la mia
risposta e cosi via.
E deve avere la possibilità di chiudere la propria segnalazione, oppure di
inserire un ulteriore commento.. es:

Domanda 1) Voglio il colore di sfondo
Domanda 2) dimenticavo, lo voglio marrone

Nel mio pannello di amministrazione dovrò vedere tutte le segnalazioni poi
discriminerò io lo stato.

I campi secondo me necessari alla domanda saranno:

USE TEMPDB
GO

CREATE TABLE Anagrafica_Clienti
(
Id_Cliente int identity primary key,
Ragione_Sociale nvarchar(120) not null
)
CREATE TABLE Segnalazioni
(
Id_Segnalazione int identity primary key,
Id_Ticket int not null,
Id_Cliente int not null references Anagrafica_Clienti(Id_Cliente),
Data_Segnalazione datetime not null,
Urgenza varchar(10) not null,
Tipologia varchar(30) not null, --Errore Sito, Errore Content, Richiesta Modifica, Richiesta inserimento contenuti.
Parte varchar(20) not null, -- Domanda Iniziale ; ReplyByAdmin; ReplyByCustomer
Descrizione nvarchar(max) not null,
Stato_Segnalazione binary CONSTRAINT DF_Stato_Segnalazione DEFAULT ((0)) -- 0 = aperta, 1 = chiusa;
)

Cosi come l'ho pensata in un'unica tabella vi sono raccolte tutti i tipi di segnalazione o risposta:

-Domanda Iniziale
-ReplyByAdmin
-ReplyByCustomer

La logica è questa:
Quando viene creato una entry viene dato un Id_Segnalazione univoco che incrementa.
Viene però generato anche un Id_Ticket a cui faranno seguito tutte le varie reply.
Quindi se il cliente prolunga la cosa si verrà a creare questa situazione (semplifico)

ID - Ticket - Descrizione
1 1 NON VA
2 1 SICURO?????
3 1 No Ora VA
4 1 Bene Ciao!!
5 2 Non vedo le news
6 2 PremiF5!!!
7 2 Perfetto! Tnx

Il problema è che, quando l'utente inserisce la domanda il numero del ticket non è stato ancora creato...
Voi direte, fai un select MAX e prendi il Ticket ID successivo, ma cosa succederebbe se nel mentre anche un altro cliente sta aprendo una segnalazione ed entrambi hanno fatto la stessa select, quindi hanno lo stesso Ticket_ID?

Beh, ho scritto tanto e forse troppo, se secondo la vostra opinione la strada giusta è questa devo solo cercare di risolvere il problema del ID_Ticket, altrimenti sono tutta orecchie per
eventuali nuove strade!

Grazie molte per il vostro eventuale prezioso aiuto.
Ely

ma_di Profilo | Junior Member

Ciao.
Se il problema è quello di avere un id univoco dai un'occhiata a

NEWID()
Creates a unique value of type uniqueidentifier.
nel SQL Server 2005 Books Online.

Ciao.

alx_81 Profilo | Guru

>Ciao a tutti,
Ciao

Ma fare la colonna come identity non ti basta?
Detto questo, non potresti pensare ad un bug tracking già fatto?
--

Alessandro Alpi | SQL Server MVP
MCP|MCITP|MCTS|MCT

http://www.alessandroalpi.net
http://blogs.dotnethell.it/suxstellino
http://mvp.support.microsoft.com/profile/Alessandro.Alpi

Ely84 Profilo | Newbie

Ciao Ma_DI
L'id deve essere di tipo Intero, perchè immaginati questa situazione:

Cliente: Ho aperto un ticket,
Admin: Dammi ID
Cliente: 12

Altrimenti con gli uniqueidentifier diventerebbe:
Dammi ID: c81c2318-1157-472f-8528-f23a59cd6886
-------------------------------------------------------------------------------------------------------

Ho suddiviso il problema in 2 tabelle (+quella dei clienti ma non c'entra con il punto del discorso)

-------------------------------------------------------------------------------------------------------------
CREATE TABLE Anagrafica_Clienti
(
Id_Cliente int identity primary key,
Ragione_Sociale nvarchar(120) not null
)

CREATE TABLE Segnalazioni
(
Id_Segnalazione int identity primary key,
Id_Cliente int not null references Anagrafica_Clienti(Id_Cliente),
Stato_Segnalazione binary CONSTRAINT DF_Stato_Segnalazione DEFAULT ((0)),
Urgenza varchar(10) not null,
Tipologia varchar(30) not null --Errore Sito, Errore Content, Richiesta Modifica, Richiesta inserimento contenuti.
)

CREATE TABLE Ticket
(
Id_Ticket int identity primary key,
Id_Segnalazione int not null references Segnalazioni(Id_Segnalazione),
Data_Segnalazione datetime not null,
Parte varchar(20) not null, --Topic-Domanda-Aggiunta commento-risposta.
Descrizione nvarchar(max) not null
)
-------------------------------------------------------------------------------------------------------


Cosi facendo L'id della segnalazione sarà ID_Segnalazione.
E verrà assegnato una volta che tutti i campi sono stati inseriti.
Dovrò fare 2 query da codice per inserire la segnalazione, una che crea la riga sulla tabella Madre(Segnalazioni) e uno che crea i Figli(Ticket)
Quando verrà aggiunto un reply dovrò (sempre tramite codice) prelevare l'ID al quale aggangiarsi e scrivere la risposta nella tabella Ticket.
Inoltre, in caso che il cliente cancelli la segnalazione perchè ritenuta errata, dovrò da codice andare a cancellare dalla tabella Ticket le righe con l'id della tabella segnalazioni.

Direi che può andare, che ne dite?
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2023
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5