![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 46 Pomógł: 1 Dołączył: 9.06.2005 Ostrzeżenie: (0%) ![]() ![]() |
Witam!!
Chciałbym się zapytać jak przechowywać dane w Bazie MySQL. Powiedzmy ze robię sobie baze z filmami np. do katalogowania włąsnych zbiorów płyt. Budowanie skryptu ma na celu czeste wyszukiwanie pozycji wg różnorodnych kryteriów (więc musi to być wydajna metoda przy tak dużych danych). Mam formularz, w którym wypełnia się formularz. Większość danych jest prosta do wprowadzenia. Ale... Problem 1: Jak przechowywać gatunki filmowe? ![]() - w postaci ciagu: 'Akcja, Dramat, Przygodowy' (tak mam obecnie w bazie) - w postaci jakiś kodów np. '#01:#04:#23' - czy może jakoś inaczej ![]() Problem 2: Teraz w osobnej tabeli chciałbym dołączyć informacje o nośniku (np. DVD). Jest tam dość skompikowane wprowadzenie z formularza scieżki dźwiekowej (jest kilka ścieżek dźwiękowych w oryginalnym DVD). Chcąc je wszystki uwzględnić trzeba prowadzić dla POJEDYŃCZEJ ścieżki dźwiekwoej takie informacje jak rodzaj kodowania (DD 5.1, DD 2.0, DTS), a następnie język (Polski Lektor, Angielski). Na każdej płycie może być dowolna ilość ścieżek od 1 do 6. Jak to wprowadzać do bazy?? - Jako pełne nazwy w postaci ciągu np. 'DD 5.1 Angielski, DD 2.0 Polski Lektor' - czy jakoś inaczej, może bardziej wydajniej? ![]() Przedstawione przykłady to jakby tabela w tabeli tylko ze MySQL nie obsługuje pól jako tablice ![]() |
|
|
![]() |
![]()
Post
#2
|
|
![]() Developer Grupa: Moderatorzy Postów: 3 045 Pomógł: 290 Dołączył: 20.01.2007 ![]() |
Ad 1. Zrób sobie tabele np. gatunki o takiej strukturze.
Kod id_filmu, id_gatunku Ad 2. Nie do końca zrozumiałem, ale raczej będzie podobnie. |
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 46 Pomógł: 1 Dołączył: 9.06.2005 Ostrzeżenie: (0%) ![]() ![]() |
Dane dla pojedynczego tytułu są przechowywane w JEDNYM WIERSZU. Jak ma pole np. 'gatunki' to co mam tam wpisać?? To jest ten główny problem
![]() ![]() |
|
|
![]()
Post
#4
|
|
![]() Developer Grupa: Moderatorzy Postów: 3 045 Pomógł: 290 Dołączył: 20.01.2007 ![]() |
Przykładowo:
Kod 1. Tytuł: Film1, Opis: Opis dla filmu pierwszego1, Czas trwania: 01:03:23, Gatunek: komedia, dokumentalny 2. Tytuł: Film2, Opis: Opis dla filmu pierwszego2, Czas trwania: 02:05:31, Gatunek: tragedia, dramat, komedia Tabela filmy: Kod id:1, title:Film1, description:Opis dla filmu pierwszego1, time:01:03:23 id:2, title:Film2, description:Opis dla filmu pierwszego2, time:02:05:31 I np. komedia id: 1, dokumentalnyid: 2, tragedia id: 3, dramat id: 4 (te dane możesz trzymać również w tabeli). Tabela wiążąca filmy z gatunkami: Kod id_filmu:1, id_gatunku: 1
id_filmu:1, id_gatunku: 2 id_filmu:2, id_gatunku: 3 id_filmu:2, id_gatunku: 4 id_filmu:2, id_gatunku: 1 |
|
|
![]()
Post
#5
|
|
Grupa: Zarejestrowani Postów: 46 Pomógł: 1 Dołączył: 9.06.2005 Ostrzeżenie: (0%) ![]() ![]() |
Właśnie snuje przemyślenia na ten temat i dochodze do wniosków, że jeśli tabela łącząca ID_filmu z ID_gatunku 'tabela_gatunki' będzie strasznie duża (chodzi o ilość rekordów; wierszy).
Powiedzmy ze mam 500 tytułów (500 x ID_filmu). Teraz w 'tabela_gatunki' zakłądając ze każdy film ma nie mniej niż 3 lub 4 gatunki stwierdzam ze długość 'tabela_gatunki' to jakieś 500 x 4 = 2000 rekordów. Czy to trochę nie zaśmieca bazy?? ![]() |
|
|
![]()
Post
#6
|
|
![]() Developer Grupa: Moderatorzy Postów: 3 045 Pomógł: 290 Dołączył: 20.01.2007 ![]() |
Co to jest 2000 rekordów?
![]() |
|
|
![]()
Post
#7
|
|
Grupa: Zarejestrowani Postów: 46 Pomógł: 1 Dołączył: 9.06.2005 Ostrzeżenie: (0%) ![]() ![]() |
mi chodzi wydajność bazy. Przeszukiwanie tego będzie dłuższe a przy większej ilości filmów spowoduje duże obciążenie dla bazy przy wyszukiwaniu kilku gatunków naraz... Przeciez te dane sa powtarzalne wiec po co przydzielac po klika wierszy garunku dla jednego filmu??
Ten post edytował mxm 2.02.2008, 12:35:05 |
|
|
![]()
Post
#8
|
|
![]() Developer Grupa: Moderatorzy Postów: 3 045 Pomógł: 290 Dołączył: 20.01.2007 ![]() |
|
|
|
![]()
Post
#9
|
|
Grupa: Zarejestrowani Postów: 46 Pomógł: 1 Dołączył: 9.06.2005 Ostrzeżenie: (0%) ![]() ![]() |
O zapytanie to ja się nie martwie. Chodzi mi tylko czy przy duzej ilosci danych oraz dużej ilości gatunków dla pojedynczego filmu ta tabela w bazie MySQL będzie działała wydajnie?
![]() |
|
|
![]()
Post
#10
|
|
Grupa: Zarejestrowani Postów: 162 Pomógł: 26 Dołączył: 19.01.2007 Ostrzeżenie: (0%) ![]() ![]() |
Proponuję tabelę gatunki: id_gatunku INT, gatunek VARCHAR
oraz tabelę gatunki_filmy: id_gatunku INT, id_filmu INT Tabela gatunki ma kilkanaście wierszy, tabela gatunki_filmy ma więcej wierszy niż tabela filmy ale dla bazy danych to nie jest problem. sorki nie doczytałem to rozwiązanie zaproponował już webdicepl Ten post edytował kitol 2.02.2008, 13:32:23 |
|
|
![]() ![]()
Post
#11
|
|
Grupa: Zarejestrowani Postów: 46 Pomógł: 1 Dołączył: 9.06.2005 Ostrzeżenie: (0%) ![]() ![]() |
Właśnie zastosowałem to rozwiązanie w mojej bazie. Jednak nie mogę wykonać żadnego indexowania, ponieważ ID_film i ID_gatunek powtarzaja sie w wielu wierszach. Czy bedzie mialo to wpływ na przeszukiwanie tej tabeli przy duzej liczbie rekordów?
![]() |
|
|
![]()
Post
#12
|
|
Grupa: Zarejestrowani Postów: 162 Pomógł: 26 Dołączył: 19.01.2007 Ostrzeżenie: (0%) ![]() ![]() |
ID_Film i ID_gatunek nie mogą się powtarzac. Jedno ID_film odpowiada jednemu filmowi i inny film mnie może mieć tego samego. Podobnie z ID_gatunek. Powinieneś mieć 3 tabele:
Masz tu relację n:n (wiele do wielu). Czyli jeden film może być zaliczany do wielu gatunków. I każdy gatunek może odpowiadać wielu filmom. Taką relację zapisuje się w 3 tabelach. Klucze główne ustawiasz tylko w tabelach filmy i gatunaki. Tabela je ł cząca nie może mieć kluczy unikalnych, a jedynie zwykłe indeksy (by przyspieszyć wyszukiwanie i sortowanie) Ten post edytował kitol 3.02.2008, 16:23:43 |
|
|
![]() ![]() |
![]() |
Aktualny czas: 19.08.2025 - 16:00 |