Strona robocza Nux-a
Ostatnia modyfikacja: 2009-09-06

Projektowanie

To jest właściwie taka moja ściągawka (szczególnie w dalszej części) przy projektowaniu schematów bazy danych, a dokładniej w fazie implementacji schematu. Tym nie mniej mam nadzieję, że te zwięzłe porady nie będą szczególnie enigmatyczne dla średniozaawansowanych programistów. Osoby początkujące z pewnością powinny poczytać trochę od podstawach projektowania baz danych i może mój mini artykuł o tabelach, co by potem zejść na ziemię ;). Nie żebym uważał się za bóg-wie-kogo, ale uczyłem się na renomowanej uczelni, a później zostałem rzucony w wir praktyki.

Klucze

  • każda tabela powinna mieć co najmniej jeden atrybut typu 'costam_id'
  • wszystkie atrybuty typu 'costam_id' (także te służące jako referencje do innej tabeli!) powinny być kluczem w tabeli
    KEY costam_id (costam_id) słówko za KEY jest nazwą klucza (w zasadzie dowolną), drugie słówko, to nazwa atrybutu
  • klucz główny jest jeden i powinien w miarę możliwości składać się z jednego 'costam_id'
    PRIMARY KEY costam_id (costam_id) składnia identyczna jak wyżej

Najczęściej wykorzystywane typy danych

indeksy/klucze

Wybieramy zależnie od przewidywanej wielkości, ale z rozsądnym zapasem!

int UNSIGNED (max. 4294967295)
mediumint UNSIGNED (max. 16777215)
smallint UNSIGNED (max. 65535)
tinyint UNSIGNED (max. 255)

inne

tinyint(1) jako typ boolean, czyli logiczny (albo jakieś statusy wszelkie)
decimal(10,2) cena (9876543210.12); jest też float, ale chyba nigdy nie używałem
int(11) data (zwrócone z mktime na przykład); można używać datetime, ale int(11) dla daty używa np.phpBB, żeby uniknąć m.in. problemów z różnymi strefami czasowymi i formatowaniem przez SQL-a
varchar(m) dla m-znakowych jednolinijkowców; ważne jest rozsądne ograniczenie - w razie czego można wydłużać przez ALTER TABLE; maksimum dla m=255 znaków
text dla większych tekstów, czyli w sumie dla wszystkiego poza bardzo krótkim komentarzem; niestety z doświadczenia wiem, że zajawka (streszczenie) artykułu często nie łapie się do tej kategorii
blob dla danych binarnych (np. plików, w szczególności obrazków)

Podstawowe zapytania (SQL)

Tutaj podaję te ktróre najłatwiej zapomnieć, bo są najrzadziej używane.

Tworzenie bazy danych i użytkownika

Stworznie bazy jest proste:

CREATE DATABASE nazwa_bazy_danych;

Gorzej z użytkownikiem. Co ciekawe użytkownika się tak naprawdę nie tworzy, tylko daje mu się dostęp (ang. grant access).

GRANT ALL ON nazwa_bazy_danych.* TO nazwa_uzytkownika@localhost IDENTIFIED BY 'haslo_uzytkownika';

Jeśli działa się na paru wersjach MySQL, to dobrze jest też dodać coś takiego:

SET PASSWORD FOR nazwa_uzytkownika@localhost = OLD_PASSWORD('haslo_uzytkownika');

Tworzenie i usuwanie tabeli

Tworzenie i usuwanie przydaje się przy rozpoczynaniu zabawy z implementacją systemu. Potem należy już to robić bardzo, bardzo ostrożnie, bo można stracić cenne dane.

Poniższa sekwencja najpierw usunie, a potem stworzy tabelę o nazwie "tabelka"

DROP TABLE IF EXISTS tabelka;

CREATE TABLE tabelka (
	tabelka_id			int UNSIGNED NOT NULL AUTO_INCREMENT,
	
	nazwa	varchar(30),
	error	tinyint(1),
	czas	int(10),
	cena	decimal(10,2),
	tekst	text,
	obrazek	blob,

	dluga_powiazana_tabelka_id	int UNSIGNED,
	krotka_powiazana_tabelka_id	smallint UNSIGNED,
	
	PRIMARY KEY (tabelka_id),
	KEY (dluga_powiazana_tabelka_id),
	KEY (krotka_powiazana_tabelka_id)
);

Linki

Więcej o poszczególnych zapytaniach:
top