Schemat bazy Microsoft SQL Server w Visio

Zapewne pisałeś już (a może właśnie ją piszesz) aplikacje, w której wykorzystywałeś bazę danych. Zapewne Twoja aplikacja była wpisana w technologii .net, więc zapewne korzystałeś z silnik Microsoft SQL Server, w któreś z jego edycji. Zapewne też, w którymś z momentów chciałeś sobie stworzyć (albo ktoś Ci kazał -dokumentacja) ładny przejrzysty schemat bazy danych (taki jak poniżej). Oraz zapewne chciałeś, aby wszystko było fajnie wyciągnięte z bazy danych, abyś nie musiał robić tego ręcznie oraz abyś mógł ten schemat w bardzo łatwy sposób zaktualizować.

visiosqlserver01

 

Microsoft w swoim pakiecie biurowym – Office - posiada bardzo fajną aplikację to tworzenia wszelkiej maści diagramów – Visio (osoby, które są studentami, na których wydziale działa MSDN AA mogą sobie ściągnąć Visio za darmo). Nie będę się rozpisywał o tym programie ale wszystkich odsyłam do strony produktu.

Jednym z diagramów jakie możemy stworzyć w Visio jest Database Model Diagram, czyli poszukiwany przez nasz model bazy danych. Diagram ten można znaleźć w grupie diagramów Software and Database.

Po stworzeniu nowego diagramu bazy danych wybieramy z menu Database (lewy alt + a), a następnie Reverse Engineer… (lewy alt + e). Pojawi się nam okienko kreatora jak poniżej:

visiosqlserver02W tym oknie możemy wybrać sobie już wcześniej utworzone źródło danych, z którego możemy pobrać schemat. Sprawdzić jakie mamy zainstalowane sterowniki do Visio, dzięki których jesteśmy w stanie wyciągnąć informacje z różnych typów aplikacji (np. Microsoft SQL Server, Microsoft Access, Oracle Server i inne). Możemy również stworzyć nowe źródło danych. Tą opcję właśnie trzeba wybrać (oczywiście tylko za pierwszym razem).

visiosqlserver03Powyżej znajduje się pierwsze okno kreatora tworzenia nowego źródła danych. Do wyboru są trzy opcje określające typ źródła.

  • File Data Source – informacje zostaną zapisane w pliku, ta opcja jest przydatna wtedy, gdy zamierzamy na przykład wrzucić schemat do repozytorium i umożliwić aktualizację schematu innych osobom w projekcie, dzięki tej opcji nie będą musiały sami tworzyć źródła
  • User Data Source – informacje zostaną zapisane w systemie, dostęp do nich będzie miał tylko ten użytkownik
  • System Data Source – podobnie jak w powyższym typie, informacje zostaną zapisane w systemie ale skorzystać z nich będzie mógł każdy użytkownik. Jeśli pracujesz w systemie Windows Vista lub Windows 7 z włączonym User Account Control to przed pojawieniem się powyższego okna dostałeś informację o braku odpowiednich uprawnień i opcja System Data Source jest niedostępna. Aby się tego pozbyć wystarczy uruchomić Visio z prawami administratora, co może nie być takie łatwe* (czemu? zobacz na koniec wpisu).

Po wybraniu typu źródła (podczas tworzenia wpisu wybrałem User Data Source, przy innych typach mogą pojawić się dodatkowe okna w kreatorze) wybieramy przycisk Next, po czym pojawi się okno:

visiosqlserver04W tym oknie musimy wybrać sterownik dla źródła danych. Wybieramy SQL Server oraz naciskamy przycisk Next.

 

 

visiosqlserver05Powyżej znajduje się ostatnie okno kreatora tworzenia nowego źródła danych, w którym znajduje się podsumowanie. Naciskamy przycisk Finish. Teraz możemy przejść do właściwego konfigurowania źródła danych z Micorosft SQL Server.

visiosqlserver06Nadajemy nazwę źródła oraz jego opis. Następnie wpisujemy adres  serwera Microsoft SQl.

visiosqlserver07Wybieramy sposób autoryzacji (Windows lub Sql Server) i wprowadzamy ewentualne dane (login i hasło).

visiosqlserver08Wybieramy bazę, której chcemy wyciągnąć schemat.

visiosqlserver09Możemy ustawić sobie jeszcze kilka bardziej zaawansowanych opcji (nie będę ich opisywał) i naciskamy Finish.

visiosqlserver10Wyświetli się nam podsumowanie stworzonego źródła danych. Możemy sprawdzić, czy wszystko jest tak jak należy oraz przetestować źródło danych za pomocą przycisku Test Data Source… 

visiosqlserver11 Gdy już mamy stworzone źródło danych możemy przejść do wyciągnięcia odpowiednich danych z bazy. W tym celu w kreatorze Reverse Engineer Wizard (jak powyżej) wybieramy utworzone źródło danych i klikamy Next.

visiosqlserver12 Możemy zostać poproszeni o nazwę użytkownika i hasło do serwera.

visiosqlserver13 Wybieramy jakiego typu rzeczy chcemy importować z bazy.

visiosqlserver15 Teraz zaznaczamy konkretne elementy bazy jakie chcemy mieć na schemacie.

visiosqlserver16Wybieramy, że chcemy dodać elementy na aktualną stronę i klikamy Next.

visiosqlserver17Ostatnie podsumowanie i za chwilę po naciśnięciu przycisku Finish możemy cieszyć się naszym wspaniałym diagramem :D

W każdej chwili możemy zaktualizować schemat bazy wybierając z menu Database => Refresh Model… Pojawi się kreator, którego okna są podobne do powyższych.

Obecnie najnowsza wersji Microsoft Office Visio domyślnie nie współpracuje z Microsoft SQL Server 2008, aby móc wyciągnąć schemat bazy z tej wersji silnika Microsoftu trzeba zainstalować dodatek do Visio, który można pobrać ze strony Microsoftu. Niestety dodatek nie jest idealny czasami mogą wystąpić problemy oraz błędy.

Jeśli znacie jakieś inne narzędzia do tego celu to podzielcie się wiedzą w komentarzach. Może istnieje coś fajniejszego niż Visio :D

* Trochę się zdziwiłem, że jak chciałem uruchomić Visio z uprawnieniami administratora to w menu start w menu kontekstowym nie było opcji Run as administrator (Windows 7 RC ang.). Klikając na szybko zauważyłem, że nie ma tej opcji tylko dla aplikacji w ramach pakietu Office, ciekawe dlaczego? Ale wystarczyło znaleźć plik Visio.exe na dysku (domyślnie c:\Program Files\Microsoft Office\Office12\) i już można było uruchomić je z uprawnieniami admina.

Tagi: , , ,

Generowanie mapy witryny z bazy danych

  Od jakiegoś czasu tworzymy pewien projekt w ASP. Jako, że z ASP mam do czynienia po raz pierwszy i wciąż się uczę, trafiłem na pewien problem: Jak wygenerować sobie sitemapa na podstawie bazy danych? Trochę poczytałem w necie, ale były tam bardziej skomplikowane rzeczy, które nam były niepotrzebne. W końcu po przejrzeniu kilku pomysłów z CodeProject udało mi się napisać prosty generator, który spełnia swoje zadanie w naszej aplikacji :)

Działanie generatora jest bardzo proste. Pobiera on dane z naszej bazy i na ich podstawie tworzy odpowiedniego XML-a. Do dostępu do danych i generowania pliku używam LINQ.
Na początku tworzymy sobie dwie tabele, tworzymy relację i dodajemy do projektu plik Database.dmbl (Linq to Sql) tak jak poniżej:

model1

W tabeli MainLink trzymam link nadrzędny do tabeli Link.
Ok. Mamy już bazę z linkami teraz czas napisać generator. Tworzymy nową klasę np. CreateMap. Stwórzmy sobie od razu konstruktor, który będzie ustawiał ścieżkę do sitemapa.

			   1: public class CreateMap
			   2:    {
			   3:        private readonly string _path;
			   4:  
			   5:        public CreateMap(string path)
			   6:        {
			   7:            _path = path;
			   8:        }

Teraz tworzymy metodę GenerateXml, w której wygenerujemy naszą mapę.

			   1: public void GenerateXml()
			   2:        {
			   3:            DatabaseDataContext databaseModel = new DatabaseDataContext();
			   4:            
			   5:            var mainLinks = from lGlowne in databaseModel.MainLinks select lGlowne;
			   6:            var mainLinksList = mainLinks.ToList();
			   7:  
			   8:            var links = from pLinki in databaseModel.Links select pLinki;
			   9:            var linksList = links.ToList();

Na początku tworzymy obiekt obsługi bazy, następnie pobieramy dane z naszych tabel i zapisujemy je w kolekcjach. Dalej użyjemy mechanizmu LINQ to XML, za pomocą którego stworzymy strukturę naszego XML-a.

			   1: XElement main = new XElement("siteMap");

Tworzymy element główny. Powyższa linijka kodu sprawi, że w naszym XML-u pojawi się:

			   1: <siteMap>

Następnie tworzymy nasz główny SiteMapNode

			   1: XElement menu = new XElement("siteMapNode", new XAttribute("title", "Menu"),
			   2:                                                    new XAttribute("description", "Menu strony"));


Po tej operacji mamy stworzoną naszą główną kategorię “Menu” w której umieścimy mapę naszej strony. Teraz pozostaje już tylko odpowiednio zapisać w elemencie “menu” dane z bazy.

			   1: foreach(var mLink in mainLinksList)
			   2:             {
			   3:                 XElement link = (new XElement("siteMapNode", new XAttribute("title", mLink.Nazwa),
			   4:                                                  new XAttribute("description", mLink.SzczegolowaNazwa),
			   5:                                                  new XAttribute("url", mLink.Sciezka)));

Najpierw tworzymy sobie Element z tabeli MainLink, pobieramy z bazy i ustawiamy jego nazwę, opis oraz ścieżkę.

			   1: foreach (var uLink in linksList)
			   2:                {
			   3:                    if (mLink.Id == uLink.LinkGlownyId)
			   4:                        link.Add(new XElement("siteMapNode", new XAttribute("title", uLink.Nazwa),
			   5:                                                              new XAttribute("description", uLink.SzczegolowaNazwa),
			   6:                                                              new XAttribute("url", uLink.Sciezka)));
			   7:                    
			   8:                }
			   9:                menu.Add(link);
			  10:            }

Następnie, w kolejnej pętli, przechodzimy po elementach tabeli “Link” sprawdzamy czy Link należy do MainLink i jeśli tak, dodajemy do naszego linka głównego link podrzędny. Ponownie na podstawie danych uzupełniamy element nazwą, opisem i ścieżką. Na samym końcu dodajemy nasz XElement razem z jego pod elementami do naszego głównego SiteMapNode’a.

Teraz pozostało już tylko nasz główny SiteMapNode zapisać do SiteMapa oraz wszystko zapisać do pliku:

			   1: main.Add(menu);
			   2:           main.Save(_path);

Jak widać, za pomocą LINQ możemy bardzo prosto i szybko stworzyć sobie prosty generator mapy naszej strony :)
TUTAJ możecie zobaczyć kod w całości.

 

Tagi: , ,

Eastgroup.pl na facebooku