nowy214
2.04.2010, 14:33:54
witam.
Muszę stworzyć bazę danych wyglądającą schematowo
takczyli mam sobie np.
Powieść która ma tytuł, ta powieść składa się z 3 tomów, każdy z tych tomów ma tytuł, autora i ilość stron.
Każdy tom ma kilka tagów opisujących dany tom.
Nie trzeba, aby wszystko zostało wypisane jednym zapytaniem, ale żeby było możliwość wypisania samych tagów lub tomów.
Da radę jakoś łatwo skonstruować taką bazę danych?
czy trzeba stosować jakieś skombinowane algorytmy, czy dodatki do jeżyka SQL?
proszę o pomoc, bo nie za bardzo wiem jak to zrobić
O normalizacji czytałeś już?
nowy214
2.04.2010, 15:34:07
nie, ale teraz coś przeczytałem na wiki i nie za bardzo rozumiem
według tego będzie ok?
Normalizacja to podstawa przy projektowaniu baz danych. Bez zrozumienia przynajmniej jej podstaw, nie zabieraj się nawet za projektowanie bazy, bo sam siebie wyprowadzisz na manowce i zniechęcisz się do dalszej pracy.
Przykład normalizacji z twojego projektu:
"Powieść która ma tytuł, ta powieść składa się z 3 tomów, każdy z tych tomów ma tytuł, autora i ilość stron"
Mamy tutaj następujące obiekty:
powieść
tom(powieści)
i cechy:
tytuł(powieści)
tytuł(tomu)
ilość stron
autor <---- czy to na pewno cecha? a może jednak obiekt?
----
tak więc wypadałoby zrobić następujące tabele:
autor: autor_id, imie, nazwisko
powiesc: powiesc_id, tytul
tom_powiesci: tom_powiesci_id, powiesc_id, autor_id, tytul, iloscStron
Pola *_id w kursywie, to klucze główne tych tabel. W sposób jednoznaczny określają rekord w danej tabeli. Czyli jak na przykład raz wprowadzisz do tabeli autor Marka Twaina, i baza przypisze mu autor_id = 1, to od tego momentu wszystkie tomy powieści jego autorstwa mają mieć autor_id=1.
Z przykładowymi danymi wyglądało by to tak
autor: autor_id, imie, nazwisko
1, Mark, Twain
2, Alfred, Szklarski
3, John Richard Reuel, Tolien
...
powiesc: powiesc_id, tytul
1, Tomek w Krainie Kangurów
2, Przygody Tomka Sawyera
3, Władca Pierścieni
4, Hobbit czyli tam i z Powrotem
...
tom_powiesci: tom_powiesci_id, powiesc_id, autor_id, tytul, iloscStron
1, 1, 2, null, 123
2, 2, 1, null, 1529
3, 3, 3, Powrót cienia, 512
4, 3, 3, Druzyna Pierscienia, 1337
5, 4, 3, null, 1234
...
nowy214
2.04.2010, 21:46:52
Tak naprawdę to prawie w ogóle nie znam się na sql, tylko ta baza danych brakuje mi do pewnego projektu.
Ale rozumiem to co napisałeś.
Podałem taki przykład żeby to zobrazować
tak naprawdę to będzie
jak w tym przykładzie ok 7 tomów i te tomy będą miały po 1000 elementów (a te elementy w rzeczywistości będą nazwiskami).
wyszukiwane będzie miało miejsce po tytule powieści a wynikami będzie tytuł id oraz te 1000 elementów.
i mam pytanie który sposób zapisu bazy danych jest lepszy/szybszy ten @Mchl czy
ten
nowy214
2.04.2010, 22:11:16
możesz zerknąć do mojego posta powyżej bo go edytowałem, zanim spojrzałem na odp.
To co jest opisane w 'Drzewa w PHP i MySQL' dotyczy całkiem innego problemu.
nowy214
3.04.2010, 13:36:43
ok sorka nie za bardzo się znam
Jak zrobić, aby był dodawany automatycznie czas i data w bazie danych przy dodawaniu rekordów?
Jakie kodowanie i porównywanie napisów umożliwia stosowania znaków specjalnych z różnych krajów?
1. Definujesz kolumnę typu TIMESTAMP DEFAULT CURRENT_TIMESTAMP. Musi to być pierwsza kolumna typu TIMESTAMP w danej tabeli.
2. Jakiekolwiek utf8_*
nowy214
3.04.2010, 14:50:52
to będzie tak razem z id w php bo w phpmyadmin nie mogę dodawać pola dodatkowego?
CREATE TABLE nba (id int NOT NULL AUTO_INCREMENT DATA TIMESTAMP, PRIMARY KEY(id),TIMESTAMP DEFAULT CURRENT_TIMESTAMP(DATA))
A ten czas będzie automatycznie dodawany jak id?
Kod
CREATE TABLE nba (
id INTEGER UNSIGNED NOT NULL AUTO_INCREMENT,
data TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY (id)
)
nowy214
3.04.2010, 15:43:27
Dzięki, ale czas jaki jest w pisany to 0000-00-00 00:00:00 a ja chce aby był wpisany automatycznie czas dodania rekordu.
Czy da tak radę?
może ja źle dodaje rekordy
tak dodaje dla samego id i data:
INSERT INTO `nba` VALUES ('', '')
INSERT INTO `nba` VALUES (null, null)
albo
INSERT INTO `nba` (data) VALUES (null)
albo
INSERT INTO `nba` (innePole1, innePole2) VALUES (innaWartosc1, innaWartosc2)
(czyli pola id i data w ogóle pomijasz, bo MySQL sam wstawia domyślne wartości)