Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Wiele tabel czy jedna z wartością strażniczą ?
Forum PHP.pl > Forum > Bazy danych
Spykaj
Lepiej stworzyć 5 tabel, np.
komentarze_newsów
komentarze_plikow_download
komentarze_artykulow
wpisy_w_ksiedze_gosci
komentarze_sondy

Czy jedną tabelę "komentarze" z polem int oznaczającym, do czego jest ten komentarz ? Mi się wydawało, że szybciej jest 5 tabel, bo baza ma mniej rekordów do przeanalizowania, a gdzieś przeczytałem, że lepiej ograniczać ilość tabeli sleep.gif to jak w końcu ? Chodzi mi głównie o wydajność, ale też trochę o pamięć, no ale w końcu to tylko 5 szablonów, a rekordy i tak prawie tyle samo miejsca zajmują.

Nazwy tabel dałem takie tylko do wyjaśnienia przykładu smile.gif)
tommy4
Zrób w jednej tabeli (trzymasz wszystko w kupie), a pole int oznaczające gdzie ma być komentarz możesz np. oznaczyć jako INDEX
Spykaj
I to dobrze będzie ? tongue.gif
mike
Tak, będzie dobrze.
Spykaj
OK, dzięki, to właśnie tak zrobię, sporo mi się uprości w zapytaniach :]

Buziaczki :*
cojack
A ja zawsze jestem tego przekonania że jak ma być wszystko w kupie to *** z taką bazą danych...
Tam będzie tyle 0 w tej bazie danych że to jest w ogóle bez sensu robić jedną wielką tabelę z 5 różnymi w ogóle nie pasującymi do siebie rekordami, przecież on ich nigdzie nie będzie ze sobą łączył, wg mnie kolego zrób to na osobnych tabelach.
kwiateusz
jakich zer? beda numerki badź inne rzeczy wskazujace tylko do czego wpis jest powiązany i jakich niepasujacych? wszystkie są praktycznie identyczne w koncu nie robi sie 5 różnych rodzai komentarzy na tej samej stronie

w tym wypadku bardzo dobrym wyjsciem jest trzymanie takichs samych wpisów w 1 tabeli
cojack
Np:

ID | komend_do_newsa | koment_do_artytuku | koment_do_księgi_gosci | koment_do_plikow | koment_do_sondy
1 | 0 | 1 | 0 | 0 | 0

A może chcesz tam jeszcze null wstawić? Standardem w ANSI SQL jest to by rekordy nie miały wartości NULL.
dr_bonzo
cojack: goraczke masz?

Cytat
Czy jedną tabelę "komentarze" z polem int oznaczającym, do czego jest ten komentarz ?

JEDNO POLE, typ z wartosciami liczbowymi lub tekstowymi? Po co robic 5 kolumn? Przeciez wyraznie napisal

Cytat
Standardem w ANSI SQL jest to by rekordy nie miały wartości NULL.

Co za bzdura, to po co NULL jest w standardzie jak ma byc nieuzywany?
kwiateusz
wypadałoby pomyśleć :]

naprosciej

id|tytul|tresc|mail|typ

1|test|komentarz|cos@cos.pl|1

gdzie 1 oznacza np komentarz do newsów
Spykaj
No dokładnie, chodzi o np. takie przyporządkowanie:
1 -> news
2 -> download
3 -> artykul
4 -> ksiega_gosci
5 -> sonda

Ma to jeszcze taką zaletę, że jak stworzę dodatkowe pole, np. takie plusy/minusy, co są na youtube, to nie muszę w 5 tabelach, tylko w jednej smile.gif ogólnie sposób z tymi indeksami w tabeli rox smile.gif
cojack
Książka:
"PHP i MySQL Tworzenie stron WWW Vademecum Profesionalisty"

Optymalizowanie bazy danych, str.316
Cytat
Ponadto powinno się dążyć do tego by, tabele zawierały jak najmniej wartości NULL, a klucze podstawowe były jak najkrótsze.



Nie mam gorączki smile.gif
kwiateusz
a czy w moim przykładzie masz chociaż 1 (nawet może być pół) null?

przy dobrym projekcie tabeli możesz i 10 rzeczy wrzucić byleby były ze sobą powiązane w stopniu znacznym
Joachim Peters
Możecie jeszcze powiedzieć jak to później wybierać? Gdzie ma być przechowywana informacja dla jakiego konkretnie pliku/newsa jest komentarz?
kwiateusz
jesli chodzi o moj przyklad to był klejony na szybko zeby wykazac ogolna koncepcje smile.gif zwyczajnie dodajesz jeszcze jedno pole z id tego do czego nalezy
Sedziwoj
Jak ja to czytam, to aż ręce opadają...
Przecież to że mają te same pola, to nie znaczy, że to są te same informacje. Ja nie wiem jak można mieć wszystko w jednym, chyba tak dużo ludzi lubi...
Czyżby za dużo siedzieli w bazach bez FK, przecież jak jest komentarz, to aż się prosi o klucz obcy. To mi przypomina dziedziczenie, dom dziedziczy po drzewo, bo przecież oba mają wysokość, itp. bzdury. To jest to samu tu, to są różne komentarze, nie ważne, że mają te same dane, więc każdy rodzaj powinien być w swojej tabeli.
Spykaj
Hmm, czy ja wiem, jakoś nie widzę tej analogii z dziedziczeniem domu od drzewa oO w końcu one wszystkie są KOMENTARZAMI, a nie tylko mają wspólne pola.
Vengeance
Kiedyś zrobiłem to tak jak tu opisujecie. Przy czym "typ" nie był liczbą a ciągiem znaków (nazwą modelu) i tak np.:

id | record_id | record_type | body

1 | 232 | News | bla bla
1 | 4424 | Photo | bla bla
1 | 2 | Subpage | bla bla

Rozwiązanie dla jednym może eleganckie, dla innych pewnie nie, ale pozwoliło mi na szybkie dodawanie komentarzy do jakiegokolwiek elementu strony.
Dodatkowo ograniczyła ilość kodu (chodź jest trochę abstrakcyjny) ale w widoku np. odpalam pomocnika przez
  1. Tytuł newsa: <?=$this->news->title;?>
  2. Komentarze:
  3. <?=$this->getComments($this->news);?>


I to samo wyświetla odpowiednie komentarze, dodaje formularz. CO więcej np. jeśli wcześniej nie przewidziałem np. komentowania Podstron serwisu, mogę je wprowadzić w 5 sekund bez dodawania kolejnej tabeli, robienia dla niej modelu, zapytań itd itd.
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.
Invision Power Board © 2001-2025 Invision Power Services, Inc.