Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Drzewo SQL
nowy214
post 2.04.2010, 14:33:54
Post #1





Grupa: Zarejestrowani
Postów: 7
Pomógł: 0
Dołączył: 2.04.2010

Ostrzeżenie: (0%)
-----


witam.
Muszę stworzyć bazę danych wyglądającą schematowo tak

czyli 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ć

Ten post edytował nowy214 2.04.2010, 14:45:12
Go to the top of the page
+Quote Post
Mchl
post 2.04.2010, 15:24:46
Post #2





Grupa: Zarejestrowani
Postów: 855
Pomógł: 145
Dołączył: 17.07.2008
Skąd: High Memory Area

Ostrzeżenie: (0%)
-----


O normalizacji czytałeś już?
Go to the top of the page
+Quote Post
nowy214
post 2.04.2010, 15:34:07
Post #3





Grupa: Zarejestrowani
Postów: 7
Pomógł: 0
Dołączył: 2.04.2010

Ostrzeżenie: (0%)
-----


nie, ale teraz coś przeczytałem na wiki i nie za bardzo rozumiem

według tego będzie ok?

Ten post edytował nowy214 2.04.2010, 15:37:49
Go to the top of the page
+Quote Post
Mchl
post 2.04.2010, 16:48:36
Post #4





Grupa: Zarejestrowani
Postów: 855
Pomógł: 145
Dołączył: 17.07.2008
Skąd: High Memory Area

Ostrzeżenie: (0%)
-----


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

...
Go to the top of the page
+Quote Post
nowy214
post 2.04.2010, 21:46:52
Post #5





Grupa: Zarejestrowani
Postów: 7
Pomógł: 0
Dołączył: 2.04.2010

Ostrzeżenie: (0%)
-----


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

Ten post edytował nowy214 2.04.2010, 22:08:37
Go to the top of the page
+Quote Post
Wicepsik
post 2.04.2010, 22:06:11
Post #6





Grupa: Zarejestrowani
Postów: 1 575
Pomógł: 299
Dołączył: 26.03.2009

Ostrzeżenie: (20%)
X----


http://wortal.php.pl/phppl/wortal/artykuly...orial_php_mysql


http://www.google.pl/search?q=mysql+tutori...lient=firefox-a


--------------------
Go to the top of the page
+Quote Post
nowy214
post 2.04.2010, 22:11:16
Post #7





Grupa: Zarejestrowani
Postów: 7
Pomógł: 0
Dołączył: 2.04.2010

Ostrzeżenie: (0%)
-----


możesz zerknąć do mojego posta powyżej bo go edytowałem, zanim spojrzałem na odp.
Go to the top of the page
+Quote Post
Mchl
post 2.04.2010, 22:26:33
Post #8





Grupa: Zarejestrowani
Postów: 855
Pomógł: 145
Dołączył: 17.07.2008
Skąd: High Memory Area

Ostrzeżenie: (0%)
-----


To co jest opisane w 'Drzewa w PHP i MySQL' dotyczy całkiem innego problemu.
Go to the top of the page
+Quote Post
nowy214
post 3.04.2010, 13:36:43
Post #9





Grupa: Zarejestrowani
Postów: 7
Pomógł: 0
Dołączył: 2.04.2010

Ostrzeżenie: (0%)
-----


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?
Go to the top of the page
+Quote Post
Mchl
post 3.04.2010, 14:07:35
Post #10





Grupa: Zarejestrowani
Postów: 855
Pomógł: 145
Dołączył: 17.07.2008
Skąd: High Memory Area

Ostrzeżenie: (0%)
-----


1. Definujesz kolumnę typu TIMESTAMP DEFAULT CURRENT_TIMESTAMP. Musi to być pierwsza kolumna typu TIMESTAMP w danej tabeli.
2. Jakiekolwiek utf8_*
Go to the top of the page
+Quote Post
nowy214
post 3.04.2010, 14:50:52
Post #11





Grupa: Zarejestrowani
Postów: 7
Pomógł: 0
Dołączył: 2.04.2010

Ostrzeżenie: (0%)
-----


to będzie tak razem z id w php bo w phpmyadmin nie mogę dodawać pola dodatkowego?
  1. 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?

Ten post edytował nowy214 3.04.2010, 15:12:16
Go to the top of the page
+Quote Post
Mchl
post 3.04.2010, 15:29:33
Post #12





Grupa: Zarejestrowani
Postów: 855
Pomógł: 145
Dołączył: 17.07.2008
Skąd: High Memory Area

Ostrzeżenie: (0%)
-----


Kod
CREATE TABLE nba (
  id INTEGER UNSIGNED NOT NULL AUTO_INCREMENT,
  data TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
  PRIMARY KEY (id)
)
Go to the top of the page
+Quote Post
nowy214
post 3.04.2010, 15:43:27
Post #13





Grupa: Zarejestrowani
Postów: 7
Pomógł: 0
Dołączył: 2.04.2010

Ostrzeżenie: (0%)
-----


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:
  1. INSERT INTO `nba` VALUES ('', '')


Ten post edytował nowy214 3.04.2010, 16:02:00
Go to the top of the page
+Quote Post
Mchl
post 3.04.2010, 16:58:46
Post #14





Grupa: Zarejestrowani
Postów: 855
Pomógł: 145
Dołączył: 17.07.2008
Skąd: High Memory Area

Ostrzeżenie: (0%)
-----


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)

Ten post edytował Mchl 3.04.2010, 16:59:54
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 26.04.2024 - 11:24