Deocamdata o sa facem doar tabelele pentru detaliile/resursele care tin de un Angajat . Hai sa enumeram citeva :
- Un Angajat are nume( se poate schimba – prin casatorie, de ex.), prenume , poza – sa le numim proprietati UserRelated
- Un Angajat poate avea telefon , laptop – sa le numim proprietati JobRelated
- Un Angajat poate avea cont de Active Directory, email , Citrix , acces VPN – sa le numim ITRelated
(Daca aveti si alte sugestii,va rog sa imi scrieti)
Evident ca am putea creea o tabela prin care sa avem , ca si coloane, toate aceste proprietati – dar aplicatia nu ar fi destul de flexibila, in cazul in care cineva ar vrea sa mai adauge un detaliu/resursa ar trebui sa refacem aplicatia. Asa incit totul se rezolva cu un nivel de indirectare – o sa creez o tabela care sa contina gruparile de Proprietati (UserRelated, JobRelated , ITRelated) –, una care sa contina Proprietatile( nume, prenume, poza, telefon, laptop, email, etc) si una care sa faca legatura intre ele. De asemenea , trebuie ca tabelele sa contina date despre cine a introdus informatia si pina cind e valabila – acestea vor fi 3 cimpuri, continute tot timpul in (aproape) fiecare tabela , de tipul :
[DateModified<NumeTabela>] [datetime] NULL, –data modificarii
[NameUserModified<NumeTabela>] [nvarchar](150) NULL, – nume utilizator care a modificat
[IPModified<NumeTabela>] [nvarchar](150) NULL, — ip-ul de la care s-a produs modificarea
Deocamdata am ajuns la urmatoarea structura :
Pentru conformitate , iata scriptul de creere al tabelelor si scriptul de creere a resurselor/detaliilor Angajatului.
http://serviciipeweb.ro/iafblog/content/binary/net35/bd/1/db.zip
Ce vreau sa fac in continuare este sa fac coloana ValueBinaryUserGroupProperty de tipul FileStream – adica sa isi pastreze datele pe hard, de fapt.
Verificam ca serverul suporta filestream – click dreapta pe server, “properties”, selectati “Advanced” si verificati ca filestream este OK:
Apoi click dreapta pe baza de date, “properties”, selectati FileGroups si acolo adaugati un filestream(bifati si “default”)
Acum trebuie sa adaugam un file ca sa putem profita de acest filestream . Trebuie ales File_Type : “filestream data”, filegroup-ul si, cel mai important, folder-ul in care sa il punem (ca alegere usoara, este acelasi folder ca fisierul primar de date)
Acum putem sa construim tabela noastra cu filestream – stergem tabela accUserGroupProperty (drop table accUserGroupProperty ) si o creeam cu suport de FileStream :
CREATE TABLE [dbo].[accUserGroupProperty](
[IDUserGroupProperty] [uniqueidentifier] NOT NULL ROWGUIDCOL PRIMARY KEY,
ToDateUserGroupProperty datetime NULL,
[ValueTextUserGroupProperty] [nvarchar](max) NULL,
[ValueBinaryUserGroupProperty] [varbinary](max) FileStream NULL,
[IDUser] [bigint] NOT NULL,
[IDProperty] [bigint] NOT NULL,
[DateModifiedUserGroupProperty] [datetime] NULL,
[NameUserModifiedUserGroupProperty] [nvarchar](150) NULL,
[IPModifiedUserGroupProperty] [nvarchar](150) NULL,
)
Ce ne trebuie neaparat pentru o coloana de tipul FileStream :
- Suport Server, BD ( facut deja)
- O coloana in tabela respectiva de tipul NOT NULL ROWGUIDCOL PRIMARY KEY
Cu ce ne afecteaza : cu aproape nimic – dar e bine sa poti vedea fisierele pe hard * de ex., poza angajatului o sa fie direct pe hard in loc sa o stocam in BD.
Nu uitati ca tot ce am facut aici prin click-uri se poate face si prin script, cu ajutorul butonului “Script” – se poate gasi usor in toate pozele precedente
Tema pentru acasa : Creeati o baza de date cu support filestream, o tabela cu o coloana filestream si inserati un text. Observati modificarile de pe folder-ul unde ati spus sa se creeze FileStream.
Lecturi Recomandate:
FileStream cu SQL Server (pe scurt)
http://blogs.microsoft.co.il/blogs/bursteg/archive/2008/05/09/sql-server-2008-filestream-part-1.aspx
Database normalization
http://en.wikipedia.org/wiki/Database_normalization
Developing Time Oriented databases in SQL