RkBlog

Hardware, programming and astronomy tutorials and reviews.

SQL i tworzenie tabel w bazie danych

W warsztacie dotyczącym zapisywania danych do bazy danych stworzyliśmy tabelę takim oto poleceniem:
CREATE TABLE `news` (
  `news_id` smallint(5) unsigned NOT NULL auto_increment,
  `news_title` varchar(255) default NULL,
  `news_text` text,
  PRIMARY KEY  (`news_id`)
) ENGINE=MyISAM;
Warto trochę omówić kwestię tworzenia tabel i języka SQL.
Polecenie CREATE TABLE tworzy tabelę o podanej nazwie i z określonymi dalej kolumnami (polami). Definicje pól znajdują się wewnątrz zwykłych nawiasów i oddzielone są od siebie przecinkami. Definicja danego pola ma strukturę:
nazwa_pola typ parametry
Gdzie parametry są opcjonalne, np:
news_text text,
parametrów nie posiada, tworzy pole news_text typu text.
Tworząc pola w tabeli bazy danych określamy jego typ. Od jego wyboru zależy jakie dane będziemy mogli wprowadzić do danego pola.
CHAR (m) Łańcuch o stałej długości M z zakresu od 1 do 256 znaków. Do łańcucha dodawane są znaki spacji uzupełniające jego długość
VARCHAR (m) Pole znakowe o zmiennej długości M z zakresu od 1 do 256 znaków. Spacje nie są dodawane.
BLOB, TEXT Dane binarne lub tekstowe o rozmiarze nie przekraczającym 65 535 bajtów
TINYINT 1-bajtowe pole, przechowujące wartości całkowite od 0 do 255 dla UNSIGNED, normalnie -127 do 127

SMALLINT

Podobne pole, dla UNSIGNED przyjąć może wartości od 0 do 65 535 lub -32 768 do 32 768 bez UNSIGNED
MEDIUMINT Zakres dla UNSIGNED: od 0 do 16 777 215, normalnie od -8 388 608 do 8 388 608
INT Normalny zakres: od -2 147 483 648 do 2 147 483 647 lub z UNSIGNED od 0 do 4 294 967 295
BIGINT Używany do przeprowadzania operacji matematycznych (obliczenia itp.)
FLOAT (m,d) Liczba zmiennoprzecinkowa o pojedynczej precyzji złożona z m liczb i d miejsc dziesiętnych
DOUBLE (m,d) 8-bajtowa liczba zmiennoprzecinkowa o podwójnej precyzji złożona z m liczb i d miejsc dziesiętnych
DECIMAL (m, d) Liczba dziesiętna reprezentowana przez łańcuch m cyfr, z których d jest na prawo od separatora części dziesiętnej
DATE Data wyświetlana w formacie Rok-miesiąc-dzień, np: 2004-08-12.
DATETIME Data i czas o formacie Rok-Miesiąc-dzień godzina:minuty:sekundy. Np. 2004-02-23 13:34:45
TIMESTAMP Data i czas liczony od początku epoki UNIXa jako znacznik czasu - zwraca liczbę sekund jaka upłynęła od 1970 roku
TIME Czas gg:mm:ss 08:30:12
Na pola auto_increment, służące do numerowania wpisów (wartość automatycznie wzrasta przy dodawaniu wpisów) stosuje się przeważnie SMALLINT UNSIGNED, na różnego rodzaju tytuły, opisy itp - VARCHAR (maksymalna długość 255 znaków) lub ewentualnie CHAR (jeżeli wiemy że dane zawsze będą miały taką samą długość). Na duże teksty stosujemy TEXT lub nawet LONGTEXT dla dodawaniu kilkumegowych i większych wpisów.
Każda "normalna" tabela powinna zawiera pole auto_increment (MySQL) czy też SERIAL dla postgresa. W powyższym przykładzie mamy: `news_id` smallint(5) unsigned NOT NULL auto_increment, Zaletą pól tego typu jest to że automatycznie ich wartość wzrasta o jeden przy dodawaniu wpisów, przy ich kasowaniu licznik nie zmienia się tj. nowy wpis nigdy nie dostanie ID istniejącego wcześniej wpisu ani też numery ID same się nie przestawią. Wartości pól auto_increment są unikalne i na ich podstawie bardzo łatwo można wykonywać operacje na określonym wpisie takie jak kasowanie czy edycja.
Od poprawnej struktury tabel w bazie danych i dobrze napisanych zapytań zależy wydajność całej naszej aplikacji. W dalszych warsztatach gdy będziemy tworzyć bardziej złożone komponenty problemy tego typu pojawią się i będą omówione jak należy :)
RkBlog

Kurs Code Igniter, 14 July 2008, Piotr Maliński

Comment article