03. Budowanie bazy danych.txt

(38 KB) Pobierz
#67
Rozdział 3.
Budowanie bazy danych

Po utworzeniu projektu bazy danych kolej na jego realizację, czyli na utworzenie tabel w relacyjnej bazie danych. Jeli chodzi o tworzenie tabel i implementację różnorodnych reguł zwišzanych z tabelami większoć baz danych udostępnia wiele opcji.
Najprostsza i najszybsza metoda polega na założeniu tabel i rozpoczęciu wprowadzania danych. W wielu wypadkach warto jednak architekturę bazy danych znacznie rozbudować: zdefiniować klucze główne, reguły zapewniajšce integralnoć danych, okrelić wartoci domylne dla kolumn i relacje między tabelami.
Wbudowanie tych reguł do samej bazy danych już przy jej utworzeniu pozwoli zaoszczędzić pisania wielu linii kodu w aplikacji obsługujšcej bazę, majšcych na celu walidację danych i zapewnienie ich integralnoci. Poza tym pozwala to zachować pewnoć, że dane w bazie spełniajš ustalone założenia, bez względu na to w jaki sposób (np. za pomocšjakiej aplikacji) zostały tam wprowadzone.
Tabele definiujemy używajšc instrukcji CREATE TABLE. W języku SQL instrukcja CREATE służy do definicji wielu obiektów w bazie danych: tabel, indeksów czy użytkowników. Do okrelenia jaki obiekt jest definiowany służy słowo kluczowe następujšce po instrukcji CREATE.
W poprzednim rozdziale omówilimy projektowanie relacyjnej bazy danych. Pokazałem, jak dane powinny być podzielone między tabelami oraz jakie własnoci przypisujemy poszczególnym tabelom. Poza wskazaniem, które kolumny spełniajš rolę kluczy nie wnikalimy w inne elementy struktury tabeli.
W tym rozdziale pokażę zastosowanie instrukcji CREATE TABLE do tworzenia tabel oraz instrukcji CREATE INDEX do tworzenia indeksów na kolumnach i grupach kolumn. Zostanie to zilustrowane utworzeniem naszej przykładowej bazy danych o filmach.
#68
Tworzenie bazy danych

W niektórych bazach danych przed rozpoczęciem tworzenia tabel, należy zdefiniować samš bazę danych oraz przydzielić dla niej miejsce w pamięci masowej komputera.
Tej operacji można dokonać poprzez graficzny interfejs użytkownika lub używajšc instrukcji CREATE DATABASE. W najprostszej formie instrukcja ta wyglšda następujšco:

CREATE DATABASE nazwa_bazy

System Oracle wymaga, aby nazwa bazy danych była nie dłuższa niż 8 znaków. Utworzenie w tym systemie bazy danych o nazwie FI wykona następujšca instrukcja :

CREATE   DATABASE   FI

Do instrukcji CREATE DATABASE można dodać wiele dodatkowych argumentów. Pozwala to na przykład okrelić fizycznš lokalizację bazy danych na dysku i wiele innych opcji. Opcje te różniš się znacznie dla poszczególnych implementacji baz danych, dlatego zostanš opisane póniej, przy okazji omawiania konkretnych produktów.

Istnieje wiele instrukcji CREATE, które pozwalajš okrelić różne wewnętrzne parametry bazy danych. Na przykład w systemie ORACLE za pomocš instrukcji CREATE TABLESPACE można powiększyć przydzielone dla tabel miejsce na dysku.
Z kolei instrukcja CREATE SCHEMA umożliwia zdefiniowanie więcej niż jednej tabeli w jednej instrukcji. Wiele z instrukcji CREATE pojawi się jeszcze w różnych rozdziałach tej ksišżki.

Dostęp do wybranej bazy danych

W przypadku, gdy pracujemy z więcej niż jednš bazš danych musimy dokładnie okrelić, w której bazie znajduje się wybrana tabela. Zwykle poprzedzamy nazwę tabeli nazwš bazy danych, żeby wskazać, że odwołujemy się do bazy innej niż aktualnie aktywna.
================
Rada
Użycie dwóch kropek pomiędzy nazwš bazy danych, a nazwš tabeli jest skrótem, który można stosować, gdy jest znany właciciel bazy danych. Pełen zapis wymaga podania ID użytkownika jak poniżej:

DB_DWA.KTO.JakaTabela

Dostęp do innej bazy danych uzyskujemy też wykorzystujšc komendę USE lub DATABASE. Przejcie do drugiej bazy danych następuje przez wydanie komendy:

USE   DB_DWA
#69
Na przykład w Microsoft SQL Server, jeżeli pracujemy w z bazš DB_JEDEN, a chcemy mieć dostęp do tabeli z DB_DWA używamy następujšcej instrukcji:

SELECT *
FROM DB DWA.. JAKA TABLICA


Tworzenie tabeli

Do zdefiniowania nowej tabeli używamy instrukcji CREATE  TABLE. Najprostsza instrukcja wyglšda następujšco:

CREATE TABLE Nazwa_Tabeli
(nazwa_kolumny     typ_danych[(rozmiar)] ,
(nazwa_kolumny     typ_danych[(rozmiar) ] ,
...)

Powstanie tabela o nazwie Nazwa_Tabeli, z kolumnami zgodnie z podanš listš. Każda kolumna musi mieć okrelony typ danych. Dla większoci typów danych wymagane jest także okrelenie rozmiaru. Szczegółowo zapoznamy się z typami danych jeszcze w tym rozdziale.
Listing 3.1 przedstawia instrukcję definiujšcš tabelę w systemie Oracle. Inna wersja tej instrukcji, stosowana w języku Transact SQL (używanym w bazach danych Sybase i Microsoft SQL Server), znajduje się na listingu 3.2.
-----------------------
Listing 3.1. Instrukcja tworzšca tabelę Studios

CREATE TABLE Studios
(name   CHAR(20),
city         VARCHAR2(50),
state        CHAR(2),
revenue   FLOAT)
---------------------
---------------------
Listing 3.2. Instrukcja tworzšca tabelę Studios w Transact SQL

CREATE TABLE Studios
(name   CHAR(20),
city    VARCHAR(50),
state   CHAR(2),
revenue FLOAT)

W tej chwili zwróćmy uwagę na strukturę instrukcji, nie przejmujšc się zdefiniowanymi typami danych. Została zdefiniowana tabela studios (studia) o czterech kolumnach: name, city, state, revenue (nazwa, miasto, stan, dochody).
W instrukcji CREATE zostało pominięte wiele opcji, jak na przykład możliwoć zdefiniowania klucza głównego, okrelenie relacji z innymi tabelami, wprowadzenie ograniczeń na wartoci dla kolumn itp. Zostanš one wszystkie omówione w dalszej częci tego rozdziału.                                                     #70
Typy danych

Definiujšc tabelę możemy okrelić dla każdej kolumny odpowiedni typ danych. Typ determinuje nie tylko sposób przechowywania danych na dysku, ale, co ważniejsze, sposób interpretacji tych danych. Na przykład porównujšc dwie wartoci liczbowe lub dwie daty na pewno nie chcesz posługiwać się kryterium porzšdku alfabetycznego.
Wymagania dotyczšce zajmowania pamięci sš równie istotne. Marnotrawstwem byłoby rezerwowanie 255 bajtów dla pola, które wykorzystuje tylko 2 bajty. Analogicznie, rezerwowanie 5 bajtów dla numeru telefonu, który może mieć 10 cyfr to zdecydowanie za mało.
Na szczęcie relacyjne bazy danych dostarczajš bardzo bogaty zestaw typów danych. Istniejš typy danych tekstowych, liczby, typy okrelajšce czas oraz obiekty, takie jak dane binarne czy duże teksty. Każda baza danych posiada swoje własne zestawy typów danych, mogšce się różnić pomiędzy sobš np. nazwami.
Niektóre systemy baz danych udostępniajš również podtypy, jak na przykład dla typu liczbowego może to być liczba całkowita, zmiennoprzecinkowa czy waluta.
==================
Rada
Pomimo, że wiele komercyjnych baz danych jest zgodna ze standardem SQL-89, a nawet częciowo z SQL-92, to nie ma jednoznacznoci w sprawie typów danych. Większoć baz danych obsługuje podstawowe typy, choć pomiędzy różnymi produktami nie ma pełnej zgodnoci. Wiele produktów uzupełnia typy standardowe własnymi rozszerzeniami. W tej ksišżce omówię typy standardowe, choć po szczegóły trzeba będzie sięgnšć do dokumentacji technicznej konkretnego produktu. W częci VI "Przeglšd baz danych" opisałem kilka typów niestandardowych.
===================

Typy danych możemy podzielić na cztery kategorie: dane łańcuchowe, numeryczne, okrelajšce czas i duże obiekty. Dane łańcuchowe mogš przechowywać właciwie każdy typ danych z zastrzeżeniem, że dane te sš traktowane tylko jak łańcuch znaków. Dane numeryczne i okrelenia czasu umożliwiajš wykonywanie działań matematycznych oraz innych funkcji do przetwarzania danych.
Ostatnia kategoria, czyli duże obiekty, służy do gromadzenia dużych iloci informacji. Sš one traktowane odmiennie od poprzednio omówionych typów danych, np. nie można porównywać takich obiektów.
Ważna różnica między typami danych polega na sposobie traktowania ich przez język SQL. Dane łańcuchowe, okrelenia czasu i duże obiekty muszš być w instrukcjach SQL zawarte w pojedyncze cudzysłowy. Dane numeryczne nie sš zapisywane w cudzysłowach.
#71
Dane łańcuchowe

W większoci baz danych mamy do dyspozycji dwa rodzaje typów łańcuchowych. Pierwsze, to łańcuchy o ustalonej długoci, drugie - o zmiennej długoci. Różnica polega na tym, że ustalona długoć powoduje zawsze rezerwację takiej samej iloci pamięci, bez względu na wymagania danych, natomiast zmienna długoć zużywa tylko tyle pamięci, ile jest potrzebne dla konkretnej wartoci.
CHAR jest typem dla danych o ustalonej długoci. W listingu 3.1 kolumna state ma okrelony typ CHAR (2). Kolumna ta zużywa zawsze 2 bajty pamięci, nawet gdy jest pusta lub wpisana wartoć zajmuje l bajt. Podobnie ustalonš na 20 znaków długoć ma pole name. W polu typu CHAR miejsce nie zużyte przez dane jest automatycznie uzupełniane spacjami.
Możemy również przechowywać łańcuchy wewnštrz typu o zmiennej długoci. Ten typ danych to VARCHAR lub w bazie Oracle VARCHAR2. Przy deklaracji tego typu danych okrelamy maksymalnš długoć. Pole city z listingu 3.1 może mieć maksymalnš długoć 50 znaków. Różnica między VARCHAR (50) a CHAR (50) polega na tym, że pole o zmiennej długoci dostosowuje potrzebnš pamięć do danych. Jeżeli pole city potrzebuje tylko 10 znaków, to tylko tyle pamięci zostanie zużytej.
Maksymalny rozmiar pola znakowego różni się znaczšco pomiędzy systemami. W systemie Oracle wynosi 2000 znaków, a pole YARCHAR2 do 4000 znaków. Inne bazy danych dopuszczajš tylko 255 znaków dla obydwu typów.
W przypadku, gdy chcemy zapamiętać większš iloć danych znakowych, do dyspozycji mamy specjalny typ dla dużych obiektów tekstowych. Oracle oferuje CLOB (Character Large OBject) umożliwiajšcy zapamiętanie do 2GB. W Microsoft SQL Server do tego celu mamy typ danych TEXT.

Dane numeryczne

Dane numeryczne ...
Zgłoś jeśli naruszono regulamin