SlideShare a Scribd company logo
Roman Czarko-Wasiutycz
Roman.Czarko@gmail.com
 Od ponad 10 lat zbieram doświadczenia związane z
technologiami Microsoftu. Poczynając od developera
PHP i C#, administratora SharePoint poprzez
administrację bazami Microsoft SQL Server na
projektowaniu i rozwijaniu hurtowni danych kończąc.
 Posiadacz tytułów: MCTS, MCSA: SQL Server 2012,
MCSE: Business Intelligence.
 Przez trzy lata Członek zarządu Stowarzyszenia
Użytkowników SQL Server PLSSUG
 Lider Wrocławskiego oddziału Stowarzyszenia PLSSUG.
 Wolnotariusz oraz współorganizator konferencji
SQLDay.
 Prywatnie fan gier komputerowych :)
2
 Projektowanie
 Normalizacja
 Klucze, Indeksy
 Typy danych
 Triggery, kursory
 Dokumentacja
 Warstwy
3
 Dane czy informacje?
 Czy tylko ja będę tą bazę/tabelę
używał/rozwijał?
 Sztuka dla sztuki czy dobre rozwiązania?
 Łatwiej jest „zrobić taska” na „odwal się” :/
 Po co „marnuję” czas na projektowanie?
4
 Każdy fakt przechowywany w bazie danych
powinien być wyrażalny w niej tylko na jeden
sposób
 Tabela powinna mieć identyfikator
 Tabela powinna zawierać dane z jednej
domeny logicznej
 Tabela nie powinna zawierać kolumn w
których dane się powtarzają
 Kolumna powinna zawierać dane
niepodzielne
5
 Mniejsza zajętość miejsca
 Szybsze sortowanie i tworzenie indeksów
 Większa ilość indeksów klastrowych
 Węższe i mniejsze indeksy
 Mniej indeksów per tabela.
 Większa wydajność operacji CRUD
 Łatwiejsze utrzymanie
6
 Zbyt mała normalizacja będzie powodowała
nadmierne powtarzanie danych
 Zbyt duża normalizacja prowadzi do
nadmiernej ilości tabel i złączeń
Oba spowodują pogorszenie wydajności i
zwiększone koszty utrzymania
7
 Klucze – po co używać?
◦ primary / foreign
 Identyfikacja rekordów
 Integralność danych
 Czytelność
 Łatwiejsze utrzymanie
 Prostsze raportowanie
 Wsparcie narzędzi
8
 Jak działają indeksy
 Gdzie w indeksie są dane?
 Z czym wiąże się zbyt duża liczba indeksów
 Indeksy w OLTP i DWH
 Jak typować kolumny do indeksowania
9
10
CREATE NONCLUSTERED INDEX [IX_accountNumber_bankName] ON [dbo].[Account]
( [accountNumber] ASC, [bankName] ASC ) INCLUDE ( [bankNumber]);
CREATE CLUSTERED INDEX [CX_Id] ON [dbo].[Acount] ([Id] ASC)
8K
8K 8K 8K
8K 8K8K 8K 8K
DANE W CI
CI / NCI
Pomyśl jak będzie wyglądał dostęp do danych a
jak wstawianie nowych wierszy?
 Używane w klauzulach WHERE, JOIN, ORDER
BY, GROUP BY – zwróć uwagę na SELECT
 Dane unikalne lub z dużą różnorodnością
 Dane w kolumnie są sekwencyjne (Clustered!)
 Stałe, niezmienne dane w kolumnie
 Małe typy danych
 Ilość indeksów dostosuj do charakteru tabeli
11
 Przechowywanie danych (dysk, pamięć,
indeksy – strony)
 Typy tekstowe [n][var]char(x)
 GUID
 XML, [var]binary(x), filestream, file tables
 Własne, nazwane typy danych
12
 Zabezpieczenia (?)
 Logiczne rozdzielenie funkcjonalności
 Odwoływanie się do obiektów [sch].[tbl]
15
 Po co używać? tylko w specyficznych
przypadkach?
 Logika w bazie :/
 Co zamiast?
◦ constraints
◦ defaults
◦ computed columns / indexed cc
◦ Change Data Capture / Change Tracking
◦ procedury do wstawiania danych
 Triggery dla DDL
16
 Wyznaczanie wartości w kolumnie
◦ lepiej: computed column, procedure
 Złożone więzy integralności
◦ lepiej: uprościć model, procedury, constrainty 
 Złożone zasady biznesowe
◦ lepiej: logika w warstwie dostępowej a nie w bazie!
 Audyt modyfikacji danych
◦ lepiej: CDC/ CT – mniej obciążające (CDC w wersji
Enterprise), kolumna z datą wstawienia + default
17
 To zależy ;)
 Bazy relacyjne oparte o teorię zbiorów
 Kursory nie powinny być używane zamiast
operacji relacyjnych
 Mogą być użyteczne gdy kursor iteruje zbiory
a nie wiersze – ale to już powinna być kwestia
optymalizacji
 Kursory nie są złem. Złem jest ich błędne
użycie.
18
 Opisowe nazwy
 Opisy (EXEC sys.sp_addextendedproperty)
dokumentacja razem z kodem na etapie
tworzenia gdy programista jeszcze wie czego
dotyczą dane
 Dodanie opisu zajmuje mało czasu a
zaoszczędza bardzo dużo przy późniejszym
utrzymaniu bazy
19
 Widoki, procedury, funkcje jako podział na
warstwy w samej bazie danych
 Znacznie uproszczona optymalizacja
 Prostszy refaktoring bazy
 Enkapsulacja
 Bezpieczeństwo
 Testowalność
 W aplikacji warstwowe podejście się sprawdza
– to samo sprawdza się w bazie danych!
20
Ślepe wdrażanie „najlepszych praktyk”
jest najlepszym przykładem
najgorszych praktyk
22
Polish SQL Server User Group
 http://plssug.org.pl
 http://meetup.com/PLSSUG
 http://youtube.com/PLSSUG
23
24
Jeśli masz pytanie to jest dobry czas, żeby je zadać 
Roman Czarko-Wasiutycz- Projektowanie baz danych

More Related Content

Similar to Roman Czarko-Wasiutycz- Projektowanie baz danych

Microsoft Business Intelligence w 2017 roku
Microsoft Business Intelligence w 2017 rokuMicrosoft Business Intelligence w 2017 roku
Microsoft Business Intelligence w 2017 roku
HighWheelSoftware
 
SQL. Od podstaw
SQL. Od podstawSQL. Od podstaw
SQL. Od podstaw
Wydawnictwo Helion
 
PostgreSQL 8.3. Ćwiczenia
PostgreSQL 8.3. ĆwiczeniaPostgreSQL 8.3. Ćwiczenia
PostgreSQL 8.3. Ćwiczenia
Wydawnictwo Helion
 
Wprowadzenie do systemów baz danych
Wprowadzenie do systemów baz danychWprowadzenie do systemów baz danych
Wprowadzenie do systemów baz danych
Wydawnictwo Helion
 
SQL. Ćwiczenia praktyczne
SQL. Ćwiczenia praktyczneSQL. Ćwiczenia praktyczne
SQL. Ćwiczenia praktyczne
Wydawnictwo Helion
 
Bazy danych SQL. Teoria i praktyka
Bazy danych SQL. Teoria i praktykaBazy danych SQL. Teoria i praktyka
Bazy danych SQL. Teoria i praktyka
Wydawnictwo Helion
 
Delphi 7 i bazy danych
Delphi 7 i bazy danychDelphi 7 i bazy danych
Delphi 7 i bazy danych
Wydawnictwo Helion
 
SQL. Optymalizacja
SQL. OptymalizacjaSQL. Optymalizacja
SQL. Optymalizacja
Wydawnictwo Helion
 
C++. Algorytmy i struktury danych
C++. Algorytmy i struktury danychC++. Algorytmy i struktury danych
C++. Algorytmy i struktury danych
Wydawnictwo Helion
 
20181004 Hubert Kobierzewski - Jakość danych w organizacji
20181004 Hubert Kobierzewski - Jakość danych w organizacji20181004 Hubert Kobierzewski - Jakość danych w organizacji
20181004 Hubert Kobierzewski - Jakość danych w organizacji
Hubert Kobierzewski
 
Maintenance_Plans_Zupełnie_Znienacka
Maintenance_Plans_Zupełnie_ZnienackaMaintenance_Plans_Zupełnie_Znienacka
Maintenance_Plans_Zupełnie_Znienacka
Tobias Koprowski
 
Czwartki z bi - Reporting Services - podstawy
Czwartki z bi - Reporting Services - podstawyCzwartki z bi - Reporting Services - podstawy
Czwartki z bi - Reporting Services - podstawy
Mariusz Koprowski
 
VirtualStudy.pl - Czwartki z BI - Reporting Services
VirtualStudy.pl - Czwartki z BI - Reporting ServicesVirtualStudy.pl - Czwartki z BI - Reporting Services
VirtualStudy.pl - Czwartki z BI - Reporting ServicesSSAS.PL
 
Łukasz Grala - BI w Sql 2008
Łukasz Grala - BI w Sql 2008Łukasz Grala - BI w Sql 2008
Łukasz Grala - BI w Sql 2008
nexik
 
Java. Aplikacje bazodanowe. Najlepsze rozwiązania
Java. Aplikacje bazodanowe. Najlepsze rozwiązaniaJava. Aplikacje bazodanowe. Najlepsze rozwiązania
Java. Aplikacje bazodanowe. Najlepsze rozwiązania
Wydawnictwo Helion
 
SQLDAY2022-AdrianChodkowski-10BledowPowerBI.pdf
SQLDAY2022-AdrianChodkowski-10BledowPowerBI.pdfSQLDAY2022-AdrianChodkowski-10BledowPowerBI.pdf
SQLDAY2022-AdrianChodkowski-10BledowPowerBI.pdf
SeeQuality.net
 
PHP, Microsoft IIS i SQL Server. Projektowanie i programowanie baz danych
PHP, Microsoft IIS i SQL Server. Projektowanie i programowanie baz danychPHP, Microsoft IIS i SQL Server. Projektowanie i programowanie baz danych
PHP, Microsoft IIS i SQL Server. Projektowanie i programowanie baz danych
Wydawnictwo Helion
 
SQL Server 2014: In-memory OLTP
SQL Server 2014: In-memory OLTPSQL Server 2014: In-memory OLTP
SQL Server 2014: In-memory OLTPWlodek Bielski
 
Gemini = BI for masses
Gemini = BI for massesGemini = BI for masses
Gemini = BI for masses
Mariusz Koprowski
 
Access 2003 PL. Kurs
Access 2003 PL. KursAccess 2003 PL. Kurs
Access 2003 PL. Kurs
Wydawnictwo Helion
 

Similar to Roman Czarko-Wasiutycz- Projektowanie baz danych (20)

Microsoft Business Intelligence w 2017 roku
Microsoft Business Intelligence w 2017 rokuMicrosoft Business Intelligence w 2017 roku
Microsoft Business Intelligence w 2017 roku
 
SQL. Od podstaw
SQL. Od podstawSQL. Od podstaw
SQL. Od podstaw
 
PostgreSQL 8.3. Ćwiczenia
PostgreSQL 8.3. ĆwiczeniaPostgreSQL 8.3. Ćwiczenia
PostgreSQL 8.3. Ćwiczenia
 
Wprowadzenie do systemów baz danych
Wprowadzenie do systemów baz danychWprowadzenie do systemów baz danych
Wprowadzenie do systemów baz danych
 
SQL. Ćwiczenia praktyczne
SQL. Ćwiczenia praktyczneSQL. Ćwiczenia praktyczne
SQL. Ćwiczenia praktyczne
 
Bazy danych SQL. Teoria i praktyka
Bazy danych SQL. Teoria i praktykaBazy danych SQL. Teoria i praktyka
Bazy danych SQL. Teoria i praktyka
 
Delphi 7 i bazy danych
Delphi 7 i bazy danychDelphi 7 i bazy danych
Delphi 7 i bazy danych
 
SQL. Optymalizacja
SQL. OptymalizacjaSQL. Optymalizacja
SQL. Optymalizacja
 
C++. Algorytmy i struktury danych
C++. Algorytmy i struktury danychC++. Algorytmy i struktury danych
C++. Algorytmy i struktury danych
 
20181004 Hubert Kobierzewski - Jakość danych w organizacji
20181004 Hubert Kobierzewski - Jakość danych w organizacji20181004 Hubert Kobierzewski - Jakość danych w organizacji
20181004 Hubert Kobierzewski - Jakość danych w organizacji
 
Maintenance_Plans_Zupełnie_Znienacka
Maintenance_Plans_Zupełnie_ZnienackaMaintenance_Plans_Zupełnie_Znienacka
Maintenance_Plans_Zupełnie_Znienacka
 
Czwartki z bi - Reporting Services - podstawy
Czwartki z bi - Reporting Services - podstawyCzwartki z bi - Reporting Services - podstawy
Czwartki z bi - Reporting Services - podstawy
 
VirtualStudy.pl - Czwartki z BI - Reporting Services
VirtualStudy.pl - Czwartki z BI - Reporting ServicesVirtualStudy.pl - Czwartki z BI - Reporting Services
VirtualStudy.pl - Czwartki z BI - Reporting Services
 
Łukasz Grala - BI w Sql 2008
Łukasz Grala - BI w Sql 2008Łukasz Grala - BI w Sql 2008
Łukasz Grala - BI w Sql 2008
 
Java. Aplikacje bazodanowe. Najlepsze rozwiązania
Java. Aplikacje bazodanowe. Najlepsze rozwiązaniaJava. Aplikacje bazodanowe. Najlepsze rozwiązania
Java. Aplikacje bazodanowe. Najlepsze rozwiązania
 
SQLDAY2022-AdrianChodkowski-10BledowPowerBI.pdf
SQLDAY2022-AdrianChodkowski-10BledowPowerBI.pdfSQLDAY2022-AdrianChodkowski-10BledowPowerBI.pdf
SQLDAY2022-AdrianChodkowski-10BledowPowerBI.pdf
 
PHP, Microsoft IIS i SQL Server. Projektowanie i programowanie baz danych
PHP, Microsoft IIS i SQL Server. Projektowanie i programowanie baz danychPHP, Microsoft IIS i SQL Server. Projektowanie i programowanie baz danych
PHP, Microsoft IIS i SQL Server. Projektowanie i programowanie baz danych
 
SQL Server 2014: In-memory OLTP
SQL Server 2014: In-memory OLTPSQL Server 2014: In-memory OLTP
SQL Server 2014: In-memory OLTP
 
Gemini = BI for masses
Gemini = BI for massesGemini = BI for masses
Gemini = BI for masses
 
Access 2003 PL. Kurs
Access 2003 PL. KursAccess 2003 PL. Kurs
Access 2003 PL. Kurs
 

More from Women in Technology Poland

Get Inspired: Po co nam UX? O edukacji i nie tylko
Get Inspired: Po co nam UX? O edukacji i nie tylkoGet Inspired: Po co nam UX? O edukacji i nie tylko
Get Inspired: Po co nam UX? O edukacji i nie tylko
Women in Technology Poland
 
Pierwsze kroki w karierze IT: LinkedIn - wykorzystaj potencjał sieci
Pierwsze kroki w karierze IT: LinkedIn - wykorzystaj potencjał sieciPierwsze kroki w karierze IT: LinkedIn - wykorzystaj potencjał sieci
Pierwsze kroki w karierze IT: LinkedIn - wykorzystaj potencjał sieci
Women in Technology Poland
 
Tech 101: Scrum 25.04.19 Warszawa
Tech 101: Scrum 25.04.19 WarszawaTech 101: Scrum 25.04.19 Warszawa
Tech 101: Scrum 25.04.19 Warszawa
Women in Technology Poland
 
ARKit by Magdalena Pałka
ARKit by Magdalena PałkaARKit by Magdalena Pałka
ARKit by Magdalena Pałka
Women in Technology Poland
 
React Native by Artur Staszczyk
React Native by Artur StaszczykReact Native by Artur Staszczyk
React Native by Artur Staszczyk
Women in Technology Poland
 
Architecure components by Paulina Szklarska
Architecure components by Paulina SzklarskaArchitecure components by Paulina Szklarska
Architecure components by Paulina Szklarska
Women in Technology Poland
 
Big Data - historia i przyszłość
Big Data - historia i przyszłośćBig Data - historia i przyszłość
Big Data - historia i przyszłość
Women in Technology Poland
 
Blockchain and Cryptocurrency Basics- #43 spotkanie WiT Kraków
Blockchain and Cryptocurrency Basics- #43 spotkanie WiT KrakówBlockchain and Cryptocurrency Basics- #43 spotkanie WiT Kraków
Blockchain and Cryptocurrency Basics- #43 spotkanie WiT Kraków
Women in Technology Poland
 
"Wyzwania automatyzacji w ciągłej integracji" - o tworzeniu i utrzymaniu test...
"Wyzwania automatyzacji w ciągłej integracji" - o tworzeniu i utrzymaniu test..."Wyzwania automatyzacji w ciągłej integracji" - o tworzeniu i utrzymaniu test...
"Wyzwania automatyzacji w ciągłej integracji" - o tworzeniu i utrzymaniu test...
Women in Technology Poland
 
Agnieszka Pocha - Od surowych danych do gotowego modelu - uczenie maszynowe w...
Agnieszka Pocha - Od surowych danych do gotowego modelu - uczenie maszynowe w...Agnieszka Pocha - Od surowych danych do gotowego modelu - uczenie maszynowe w...
Agnieszka Pocha - Od surowych danych do gotowego modelu - uczenie maszynowe w...
Women in Technology Poland
 
Monika Synoradzka - 10 sposobów na budowę silnego zespołu i bycie dobrym lide...
Monika Synoradzka - 10 sposobów na budowę silnego zespołu i bycie dobrym lide...Monika Synoradzka - 10 sposobów na budowę silnego zespołu i bycie dobrym lide...
Monika Synoradzka - 10 sposobów na budowę silnego zespołu i bycie dobrym lide...
Women in Technology Poland
 
Kulisy pracy w IT: Zawód Front- end Developer prezentacja Pawła Janasa
Kulisy pracy w IT: Zawód Front- end Developer prezentacja Pawła JanasaKulisy pracy w IT: Zawód Front- end Developer prezentacja Pawła Janasa
Kulisy pracy w IT: Zawód Front- end Developer prezentacja Pawła Janasa
Women in Technology Poland
 
Jak bardzo techniczny musi być tester?
Jak bardzo techniczny musi być tester?Jak bardzo techniczny musi być tester?
Jak bardzo techniczny musi być tester?
Women in Technology Poland
 
Poznaj GITa - Natalia Stanko
Poznaj GITa - Natalia StankoPoznaj GITa - Natalia Stanko
Poznaj GITa - Natalia Stanko
Women in Technology Poland
 
Poznaj GITa - część teoretyczna - Anna Szwiec
Poznaj GITa -  część teoretyczna - Anna SzwiecPoznaj GITa -  część teoretyczna - Anna Szwiec
Poznaj GITa - część teoretyczna - Anna Szwiec
Women in Technology Poland
 
HTML, CSS & Javascript Architecture (extended version) - Jan Kraus
HTML, CSS & Javascript Architecture (extended version) - Jan KrausHTML, CSS & Javascript Architecture (extended version) - Jan Kraus
HTML, CSS & Javascript Architecture (extended version) - Jan Kraus
Women in Technology Poland
 
Architektura html, css i javascript - Jan Kraus
Architektura html, css i javascript - Jan KrausArchitektura html, css i javascript - Jan Kraus
Architektura html, css i javascript - Jan Kraus
Women in Technology Poland
 
Hackerspace Wrocław
Hackerspace WrocławHackerspace Wrocław
Hackerspace Wrocław
Women in Technology Poland
 
Justyna Hankiewicz- Jak zbudować efektywny zespół
Justyna Hankiewicz- Jak zbudować efektywny zespółJustyna Hankiewicz- Jak zbudować efektywny zespół
Justyna Hankiewicz- Jak zbudować efektywny zespół
Women in Technology Poland
 
Warsztaty o zdrowiu karolina jarosz trener personalny
Warsztaty o zdrowiu   karolina jarosz trener personalnyWarsztaty o zdrowiu   karolina jarosz trener personalny
Warsztaty o zdrowiu karolina jarosz trener personalny
Women in Technology Poland
 

More from Women in Technology Poland (20)

Get Inspired: Po co nam UX? O edukacji i nie tylko
Get Inspired: Po co nam UX? O edukacji i nie tylkoGet Inspired: Po co nam UX? O edukacji i nie tylko
Get Inspired: Po co nam UX? O edukacji i nie tylko
 
Pierwsze kroki w karierze IT: LinkedIn - wykorzystaj potencjał sieci
Pierwsze kroki w karierze IT: LinkedIn - wykorzystaj potencjał sieciPierwsze kroki w karierze IT: LinkedIn - wykorzystaj potencjał sieci
Pierwsze kroki w karierze IT: LinkedIn - wykorzystaj potencjał sieci
 
Tech 101: Scrum 25.04.19 Warszawa
Tech 101: Scrum 25.04.19 WarszawaTech 101: Scrum 25.04.19 Warszawa
Tech 101: Scrum 25.04.19 Warszawa
 
ARKit by Magdalena Pałka
ARKit by Magdalena PałkaARKit by Magdalena Pałka
ARKit by Magdalena Pałka
 
React Native by Artur Staszczyk
React Native by Artur StaszczykReact Native by Artur Staszczyk
React Native by Artur Staszczyk
 
Architecure components by Paulina Szklarska
Architecure components by Paulina SzklarskaArchitecure components by Paulina Szklarska
Architecure components by Paulina Szklarska
 
Big Data - historia i przyszłość
Big Data - historia i przyszłośćBig Data - historia i przyszłość
Big Data - historia i przyszłość
 
Blockchain and Cryptocurrency Basics- #43 spotkanie WiT Kraków
Blockchain and Cryptocurrency Basics- #43 spotkanie WiT KrakówBlockchain and Cryptocurrency Basics- #43 spotkanie WiT Kraków
Blockchain and Cryptocurrency Basics- #43 spotkanie WiT Kraków
 
"Wyzwania automatyzacji w ciągłej integracji" - o tworzeniu i utrzymaniu test...
"Wyzwania automatyzacji w ciągłej integracji" - o tworzeniu i utrzymaniu test..."Wyzwania automatyzacji w ciągłej integracji" - o tworzeniu i utrzymaniu test...
"Wyzwania automatyzacji w ciągłej integracji" - o tworzeniu i utrzymaniu test...
 
Agnieszka Pocha - Od surowych danych do gotowego modelu - uczenie maszynowe w...
Agnieszka Pocha - Od surowych danych do gotowego modelu - uczenie maszynowe w...Agnieszka Pocha - Od surowych danych do gotowego modelu - uczenie maszynowe w...
Agnieszka Pocha - Od surowych danych do gotowego modelu - uczenie maszynowe w...
 
Monika Synoradzka - 10 sposobów na budowę silnego zespołu i bycie dobrym lide...
Monika Synoradzka - 10 sposobów na budowę silnego zespołu i bycie dobrym lide...Monika Synoradzka - 10 sposobów na budowę silnego zespołu i bycie dobrym lide...
Monika Synoradzka - 10 sposobów na budowę silnego zespołu i bycie dobrym lide...
 
Kulisy pracy w IT: Zawód Front- end Developer prezentacja Pawła Janasa
Kulisy pracy w IT: Zawód Front- end Developer prezentacja Pawła JanasaKulisy pracy w IT: Zawód Front- end Developer prezentacja Pawła Janasa
Kulisy pracy w IT: Zawód Front- end Developer prezentacja Pawła Janasa
 
Jak bardzo techniczny musi być tester?
Jak bardzo techniczny musi być tester?Jak bardzo techniczny musi być tester?
Jak bardzo techniczny musi być tester?
 
Poznaj GITa - Natalia Stanko
Poznaj GITa - Natalia StankoPoznaj GITa - Natalia Stanko
Poznaj GITa - Natalia Stanko
 
Poznaj GITa - część teoretyczna - Anna Szwiec
Poznaj GITa -  część teoretyczna - Anna SzwiecPoznaj GITa -  część teoretyczna - Anna Szwiec
Poznaj GITa - część teoretyczna - Anna Szwiec
 
HTML, CSS & Javascript Architecture (extended version) - Jan Kraus
HTML, CSS & Javascript Architecture (extended version) - Jan KrausHTML, CSS & Javascript Architecture (extended version) - Jan Kraus
HTML, CSS & Javascript Architecture (extended version) - Jan Kraus
 
Architektura html, css i javascript - Jan Kraus
Architektura html, css i javascript - Jan KrausArchitektura html, css i javascript - Jan Kraus
Architektura html, css i javascript - Jan Kraus
 
Hackerspace Wrocław
Hackerspace WrocławHackerspace Wrocław
Hackerspace Wrocław
 
Justyna Hankiewicz- Jak zbudować efektywny zespół
Justyna Hankiewicz- Jak zbudować efektywny zespółJustyna Hankiewicz- Jak zbudować efektywny zespół
Justyna Hankiewicz- Jak zbudować efektywny zespół
 
Warsztaty o zdrowiu karolina jarosz trener personalny
Warsztaty o zdrowiu   karolina jarosz trener personalnyWarsztaty o zdrowiu   karolina jarosz trener personalny
Warsztaty o zdrowiu karolina jarosz trener personalny
 

Roman Czarko-Wasiutycz- Projektowanie baz danych

  • 2.  Od ponad 10 lat zbieram doświadczenia związane z technologiami Microsoftu. Poczynając od developera PHP i C#, administratora SharePoint poprzez administrację bazami Microsoft SQL Server na projektowaniu i rozwijaniu hurtowni danych kończąc.  Posiadacz tytułów: MCTS, MCSA: SQL Server 2012, MCSE: Business Intelligence.  Przez trzy lata Członek zarządu Stowarzyszenia Użytkowników SQL Server PLSSUG  Lider Wrocławskiego oddziału Stowarzyszenia PLSSUG.  Wolnotariusz oraz współorganizator konferencji SQLDay.  Prywatnie fan gier komputerowych :) 2
  • 3.  Projektowanie  Normalizacja  Klucze, Indeksy  Typy danych  Triggery, kursory  Dokumentacja  Warstwy 3
  • 4.  Dane czy informacje?  Czy tylko ja będę tą bazę/tabelę używał/rozwijał?  Sztuka dla sztuki czy dobre rozwiązania?  Łatwiej jest „zrobić taska” na „odwal się” :/  Po co „marnuję” czas na projektowanie? 4
  • 5.  Każdy fakt przechowywany w bazie danych powinien być wyrażalny w niej tylko na jeden sposób  Tabela powinna mieć identyfikator  Tabela powinna zawierać dane z jednej domeny logicznej  Tabela nie powinna zawierać kolumn w których dane się powtarzają  Kolumna powinna zawierać dane niepodzielne 5
  • 6.  Mniejsza zajętość miejsca  Szybsze sortowanie i tworzenie indeksów  Większa ilość indeksów klastrowych  Węższe i mniejsze indeksy  Mniej indeksów per tabela.  Większa wydajność operacji CRUD  Łatwiejsze utrzymanie 6
  • 7.  Zbyt mała normalizacja będzie powodowała nadmierne powtarzanie danych  Zbyt duża normalizacja prowadzi do nadmiernej ilości tabel i złączeń Oba spowodują pogorszenie wydajności i zwiększone koszty utrzymania 7
  • 8.  Klucze – po co używać? ◦ primary / foreign  Identyfikacja rekordów  Integralność danych  Czytelność  Łatwiejsze utrzymanie  Prostsze raportowanie  Wsparcie narzędzi 8
  • 9.  Jak działają indeksy  Gdzie w indeksie są dane?  Z czym wiąże się zbyt duża liczba indeksów  Indeksy w OLTP i DWH  Jak typować kolumny do indeksowania 9
  • 10. 10 CREATE NONCLUSTERED INDEX [IX_accountNumber_bankName] ON [dbo].[Account] ( [accountNumber] ASC, [bankName] ASC ) INCLUDE ( [bankNumber]); CREATE CLUSTERED INDEX [CX_Id] ON [dbo].[Acount] ([Id] ASC) 8K 8K 8K 8K 8K 8K8K 8K 8K DANE W CI CI / NCI
  • 11. Pomyśl jak będzie wyglądał dostęp do danych a jak wstawianie nowych wierszy?  Używane w klauzulach WHERE, JOIN, ORDER BY, GROUP BY – zwróć uwagę na SELECT  Dane unikalne lub z dużą różnorodnością  Dane w kolumnie są sekwencyjne (Clustered!)  Stałe, niezmienne dane w kolumnie  Małe typy danych  Ilość indeksów dostosuj do charakteru tabeli 11
  • 12.  Przechowywanie danych (dysk, pamięć, indeksy – strony)  Typy tekstowe [n][var]char(x)  GUID  XML, [var]binary(x), filestream, file tables  Własne, nazwane typy danych 12
  • 13.  Zabezpieczenia (?)  Logiczne rozdzielenie funkcjonalności  Odwoływanie się do obiektów [sch].[tbl] 15
  • 14.  Po co używać? tylko w specyficznych przypadkach?  Logika w bazie :/  Co zamiast? ◦ constraints ◦ defaults ◦ computed columns / indexed cc ◦ Change Data Capture / Change Tracking ◦ procedury do wstawiania danych  Triggery dla DDL 16
  • 15.  Wyznaczanie wartości w kolumnie ◦ lepiej: computed column, procedure  Złożone więzy integralności ◦ lepiej: uprościć model, procedury, constrainty   Złożone zasady biznesowe ◦ lepiej: logika w warstwie dostępowej a nie w bazie!  Audyt modyfikacji danych ◦ lepiej: CDC/ CT – mniej obciążające (CDC w wersji Enterprise), kolumna z datą wstawienia + default 17
  • 16.  To zależy ;)  Bazy relacyjne oparte o teorię zbiorów  Kursory nie powinny być używane zamiast operacji relacyjnych  Mogą być użyteczne gdy kursor iteruje zbiory a nie wiersze – ale to już powinna być kwestia optymalizacji  Kursory nie są złem. Złem jest ich błędne użycie. 18
  • 17.  Opisowe nazwy  Opisy (EXEC sys.sp_addextendedproperty) dokumentacja razem z kodem na etapie tworzenia gdy programista jeszcze wie czego dotyczą dane  Dodanie opisu zajmuje mało czasu a zaoszczędza bardzo dużo przy późniejszym utrzymaniu bazy 19
  • 18.  Widoki, procedury, funkcje jako podział na warstwy w samej bazie danych  Znacznie uproszczona optymalizacja  Prostszy refaktoring bazy  Enkapsulacja  Bezpieczeństwo  Testowalność  W aplikacji warstwowe podejście się sprawdza – to samo sprawdza się w bazie danych! 20
  • 19. Ślepe wdrażanie „najlepszych praktyk” jest najlepszym przykładem najgorszych praktyk 22
  • 20. Polish SQL Server User Group  http://plssug.org.pl  http://meetup.com/PLSSUG  http://youtube.com/PLSSUG 23
  • 21. 24 Jeśli masz pytanie to jest dobry czas, żeby je zadać 

Editor's Notes

  1. 1PN – kol. Adresowa
  2. SQL Prompt, SSDT
  3. sys.sysname - nvarchar(128) NOT NULL
  4. Procedura