MickDev
17.03.2010, 11:13:04
Witam,
Poszukuję pomocy w rozwiązaniu pewnego problemu. Planuję zrobić stronę we frameworku Kohana. Na stronie będzie możliwa rejestracja użytkowników. Wykorzystam do tego pomocne mechanizmy frameworka i jedną bazę MySQL. Każdy użytkownik z kolei, w zamierzeniu, ma mieć swoją bazę danych składającą się z kilku tabel połączonych relacjami. Pytanie jak w jednej bazie składować mniejsze bazy każdego użytkownika. Myślałem nad tym żeby dla każdego użytkownika tworzyć potrzebne tabele z prefiksem w nazwie. Jednak przy ilości ~8 tabel dla każdego i ilości 1000 użytkowników wychodzi 8000 tabel. Jak można to rozwiązać ? Czy tworzenie pojedynczej bazy sqlite ma sens ? Proszę o podpowiedzi, bo nie mam pojęcia jak się rozwiązuje takie przypadki.
Pozdrawiam
blooregard
17.03.2010, 11:17:10
Cytat
Każdy użytkownik z kolei, w zamierzeniu, ma mieć swoją bazę danych składającą się z kilku tabel połączonych relacjami.
A po co każdemu użytkownikowi osobna baza danych?
MickDev
17.03.2010, 11:23:42
Robię stronę do zarządzania OSP. Każda jednostka (czyt. użytkownik) ma mieć możliwość wprowadzania strażaków, wyjazdów, etc. Pytanie jest jak te informacje przechować w bazie, żeby zachować relacje.
phpion
17.03.2010, 11:27:41
Do każdej tabeli dodaj pole user_id identyfikujące jaki użytkownik (jednostka OSP) jest właścicielem danego rekordu.
blooregard
17.03.2010, 11:29:57
tabela OSP:
osp_id osp_nazwa osp_siedziba ... itd.
tabela STRAZACY:
strazak_id osp_id strazak_imie strazak_nazw ... itd.
tabela WYJAZDY
wyjazd_id osp_id wyjazd_data wyjazd_do wyjazd_cel .... itd.
tabela STRAZAK_WYJAZDY
sw_id strazak_id wyjazd_id
Wszystko masz połączone poprzez klucze osp_id oraz strazak_id (który strażak z której jednostki OSP, która jednostak gdzie i kiedy pojechała na wyjazd, który strażak był na danym wyjeździe itp.)
MickDev
17.03.2010, 11:38:51
Myślałem nad tym w ten sposób. Pewnie to wykorzystam

A co jeśli będę miał zrobić Backup bazy dla danej jednostki ?
Z poziomu PHP będę generował skrypt sql, który będzie zawierał dane pobrane za pomocą select'ów dla każdej tabeli (select * from strazacy where osp_id=x). Dobrze myślę ? Czy jest prostsze rozwiązanie ? Oczywiście poza backup'em całej bazy.
icetique
17.03.2010, 12:38:33
Nie sprawdzałem tego osobiście i nie wiem jak to dokładnie działa dla danych tabel, ale mysqldump posiada opcję --where:
http://dev.mysql.com/doc/refman/5.1/en/mys...mysqldump_whereEDIT:
Za to znalazłem gdzieś przykład:
Kod
mysqldump -u root -p hotswap EmailDatabase_k EmailMessage_k
--where="EmailDatabase_k.Account='kvanoni' and
EmailDatabase_k.id=EmailMessage_k.id" > kvanoni.db
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę
kliknij tutaj.