Consiglio su T-SQL, e SQL 2008/Express

sabato 13 febbraio 2010 - 16.33

Anonimo Profilo | Senior Member

Salve, sto studiando l'SQL express, e volevo sapere se per voi questa tabella sia alla perfezzione.
ora vi posto il t-sql.
USO SQL EXPRESS 2008/2005
--
CREATE TABLE users
(
ID bigint IDENTITY(1,1) PRIMARY KEY,
Name varchar(50),
Surname varchar(50),
sex tinyint, /* 0= Maschio, 1=Femmina */
birth nvarchar(50),
age int,
Username nvarchar(255),
Username_title nvarchar(255), /* User founder , user registred , user newbie*/
picUrl nvarchar(255),
Email nvarchar(255),
[Password] nvarchar(50),
location nvarchar(50),
contact_ text,/* Info contact, Split-->> skype, msn, aol, */
info text,
Livello bigint, /* 10=Admin, 20=Manager, 30=User o 1=Admin, 2=Manager, 3=User etc...*/
Ruolo nvarchar(15), /* Admin, Manager , User --> Forms Authenticate Users*/
Ip nvarchar(15),
Browser nvarchar(255),
update_login datetime, /* Login Access Update date time */
[login] int, /* Login True==False */
Dir bigint, /* update user directory data file personal*/
_key bigint, /* key active sending link confirm */
status bigint, /* 0=Non Active, 1=Active, 2=Banned */
data_reg datetime
)
-----

Mi dite se va bene per usare quantità di utenti....infiniti. senza poi ci rischia di re-creare il db.?

grazie

alx_81 Profilo | Guru

>Salve,
Ciao

> birth nvarchar(50),
se è una data, usa il tipo Date (se hai 2008) o smalldatetime (se hai 2005).
Date non salva l'orario, quindi se ti serve, anche in 2008, usa smalldatetime. Se invece ti basta il giorno preferisci Date.

> age int,
eheheh.. spero.. ma se è in anni, direi che tinyint basta e avanza

> Username nvarchar(255),
io preferirei meno caratteri, non credo che molta gente ricorderebbe un username di più di una 20ina di caratteri, non trovi?

>Username_title nvarchar(255), /* User founder , user registred , user newbie*/
Qui c'è un problema di normalizzazione. Forse è meglio che metti un codice che identifichi quella descrizione e che magari la descrizione la porti in una tabella di dominio.
Potresti usare un tinint con valore 1,2 o 3. Poi fare una tabella degli usertitles la cui chiave è 1,2 o 3 e in cui metti la descrizione estesa.

> location nvarchar(50),
se si tratta di paese, vale lo stesso discorso del titolo, meglio una tabella dei paesi e un codice in questa tabella.

>contact_ text,/* Info contact, Split-->> skype, msn, aol, */
intanto preferisci il varchar(MAX) al text, ma poi, come mai ti serve così lungo? ricorda che mettere le informazioni in maniera non atomica (ovvero un solo valore per ogni campo) significa violare la prima forma normale dei database ed è una pratica da non seguire.

> info text,
preferisci il varchar(MAX)

>Livello bigint, /* 10=Admin, 20=Manager, 30=User o 1=Admin, 2=Manager, 3=User etc...*/
mmmmh... bigint... secondo me smallint è già tanto. 65535 livelli ti bastano? Se sì, smallint, altrimenti se già 255 sono sufficienti, tinyint

> Browser nvarchar(255),
idem come gli user titles

> [login] int, /* Login True==False */
se è un true/false, bit.

> Dir bigint, /* update user directory data file personal*/
bigint? sono troppi.

> _key bigint, /* key active sending link confirm */
se puoi riduci anche qui.

>status bigint, /* 0=Non Active, 1=Active, 2=Banned */
tinyint, assolutamente.

>Mi dite se va bene per usare quantità di utenti....infiniti.
infiniti è irrealizzabile, nel senso che con bigint sei a posto per centenari, a meno che non iscrivi un milione di utenti al giorno, e spero per te

>senza poi ci rischia di re-creare il db.?
per evitare di dover "ricreare" il database o comunque per evitare di metterci troppo le mani accanto dando anche consistenza segui sempre queste regole, cercando di arrivare alla terza forma normale:
http://it.wikipedia.org/wiki/Normalizzazione_del_database

>grazie
di nulla!
--

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
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-2017
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5