Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Planowanie bazy - relacja wiele do wielu
Lynks
post 24.09.2009, 12:58:21
Post #1





Grupa: Zarejestrowani
Postów: 9
Pomógł: 0
Dołączył: 30.10.2006
Skąd: Łódź

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


Witam, na początek krótkie streszczenie.
Serwis przechowuje informacje o sklepach/punktach naprawczych rowerów/części rowerowych, a także o dodatkowych usługach jakie dany punkt oferuje. Zaplanowałem:
tabelę sklep(zawiera dane teleadresowe i krótki opis),
tabelę marki_sprzętu(tabela słownikowa ok. 100 rekordów),
tabelę usługi(ponownie tabela słownikowa ok. 20 rekordów).
Użytkownik dodający swój punkt do bazy może wybrać obsługiwane marki sprzętu, tu pojawia się problem bowiem może zaznaczyć zarówno jedną, jak i wszystkie marki. Chciałem to zrealizować poprzez dodatkową tabelę przechowującą id_sklepu i id_marki jednak przy początkowych założeniach 3000 punktów i 100 marek (plus to,że większość użytkowników zaznaczyła wszystkie marki) daje mi tabelę na ok. 300000 rekordów.
Tabele sklep i usługi połączone w sposób jak wyżej.
Czy taka struktura zapewni optymalną wydajność wyszukiwań (przy założonym ruchu ok 100000 zapytań dziennie), czy możecie polecić mi jakieś bardziej wydajne rozwiązanie?

Pozdrawiam Lynks


--------------------
Studia przeszkadzają w spaniu
Go to the top of the page
+Quote Post
vokiel
post 24.09.2009, 13:15:18
Post #2





Grupa: Zarejestrowani
Postów: 2 592
Pomógł: 445
Dołączył: 12.03.2007

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


Możesz umieścić to w jednym polu np po przecinku. Później odbierając dane z zapytania rozbić to po tym przecinku.


--------------------
Go to the top of the page
+Quote Post
Lynks
post 24.09.2009, 13:49:52
Post #3





Grupa: Zarejestrowani
Postów: 9
Pomógł: 0
Dołączył: 30.10.2006
Skąd: Łódź

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


Ale takie rozwiązanie generuje problemy przy wyszukiwaniu punktów sprzedających konkretną markę.
Przy moim podejściu robię w sumie proste złączenie. Przy wpisaniu wartości do jednego pola muszę kombinować z LIKE (chyba wolniejsze niż JOIN ?)lub zastosować pole typu SET, które przechowuje niestety "tylko" 64 wartości.

Ten post edytował Lynks 24.09.2009, 13:51:43


--------------------
Studia przeszkadzają w spaniu
Go to the top of the page
+Quote Post
vokiel
post 24.09.2009, 18:09:14
Post #4





Grupa: Zarejestrowani
Postów: 2 592
Pomógł: 445
Dołączył: 12.03.2007

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


A użycie w sql in() ? Też da Ci złączenie i będzie w jednym zapytaniu.


--------------------
Go to the top of the page
+Quote Post
Lynks
post 25.09.2009, 15:07:12
Post #5





Grupa: Zarejestrowani
Postów: 9
Pomógł: 0
Dołączył: 30.10.2006
Skąd: Łódź

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


Szczerze mówiąc nie potrafię sobie wyobrazić jak mógłbym tego użyć - czy mógłbyś pokazać jakiś przykład?
PS. Wiem jak działa funkcja IN() smile.gif


--------------------
Studia przeszkadzają w spaniu
Go to the top of the page
+Quote Post
vokiel
post 25.09.2009, 15:21:47
Post #6





Grupa: Zarejestrowani
Postów: 2 592
Pomógł: 445
Dołączył: 12.03.2007

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


przykładowo:
  1. SELECT `CATEGORY`.`ID`, `CATEGORY`.`NAME` FROM `CATEGORY` WHERE `CATEGORY`.`ID` IN((SELECT `CATEGORY_ID` FROM `PRODUCTS` WHERE `PRODUCTS`.`ID`<100));


Ten post edytował vokiel 25.09.2009, 15:22:23


--------------------
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: 15.07.2025 - 02:01