![]() |
[HTML][MySQL][PHP]PHP , MySql Tabele i rekordy, Wyciąganie danych - Wersja do druku +- Forum Webmastera, HTML, CSS, PHP, MySQL, Hosting, Domeny - Forum dla Webmasterów (https://www.webmastertalk.pl) +-- Dział: Technologie internetowe - tworzenie stron WWW (https://www.webmastertalk.pl/forum-technologie-internetowe-tworzenie-stron-www) +--- Dział: Początkujący webmaster (https://www.webmastertalk.pl/forum-poczatkujacy-webmaster) +--- Wątek: [HTML][MySQL][PHP]PHP , MySql Tabele i rekordy, Wyciąganie danych (/thread-html-mysql-php-php-mysql-tabele-i-rekordy-wyciaganie-danych) |
[HTML][MySQL][PHP]PHP , MySql Tabele i rekordy, Wyciąganie danych - mlodyzero - 08-01-2013 Witam Panowie oraz Panie. Mam następujący problem. Z moim nauczyciele informatyki staramy się dojść do tego jak rozwiązać następujacy problem: W PHP pisze program do obsługi bazy danych. W tabeli komputer mam następujące kolumny : ID_Komputera | Nr_Inwetaryzacyjny | ID_Sali_k | ID_OS1_k | ID_OS2_k | ID_Program_Anty_k W tabeli OS mam następujace kolumny : ID_OS | Nazwa_OS I potrzebuje napisać kwerende w której w miejsce ID_OS1_k oraz ID_OS2_k wstawić Nazwa_OS przy czym dla obu pół są to różne wartości. Próbowałem kwerende : select ID_Komputera, Nr_Inwentaryzacyjny, Numer_Sali, Nazwa_OS, MS_Office from komputer, sala, OS WHERE Nr_Inwentaryzacyjny LIKE '%$e%' and ID_Sali = ID_Sala and ID_OS1_k = ID_OS and ID_OS2_k = ID_OS; Ale nic mi nie pokazuje. Pozdrawiam RE: [HTML][MySQL][PHP]PHP , MySql Tabele i rekordy, Wyciąganie danych - hieroshima - 08-01-2013 Bo to jest zle zaprojektowane. Tu powinna być normalnie relacja 1..n btw. Access to złooo ![]() Komputer: ID_komp <pk> Nr_inter ID_Sali <FK> ID_OS <FK> OS: ID_OS <PK> Nazwa_os RE: [HTML][MySQL][PHP]PHP , MySql Tabele i rekordy, Wyciąganie danych - mlodyzero - 08-01-2013 Tylko właśnie muszę przyjąć iż w komputer muszę przechowywać dwa systemy operacyjne (ID_OS1_k , ID_OS2_k) RE: [HTML][MySQL][PHP]PHP , MySql Tabele i rekordy, Wyciąganie danych - Pedro84 - 08-01-2013 @hieroshima - podałeś zwykłą relację 1:1 ;-) @mlodyzero - masz zły design bazy, nawet może nie tyle zły, co zdenormalizowany do granic. A co w przypadku, gdy zostanie dodany dodatkowy OS dla komputera? Prościej Ci będzie zrobić coś w deseń: Kod: Komputer: ID Sala do tego zwykły JOIN i jedziemy. RE: [HTML][MySQL][PHP]PHP , MySql Tabele i rekordy, Wyciąganie danych - hieroshima - 08-01-2013 sorki to z pośpiechu ![]() ![]() Komputer: ID_komp <pk> Nr_inter OS: ID_OS <PK> Nazwa_os id_komp <fk> (08-01-2013, 20:38)mlodyzero napisał(a): Tylko właśnie muszę przyjąć iż w komputer muszę przechowywać dwa systemy operacyjne (ID_OS1_k , ID_OS2_k) no i właśnie o to chodzi w relacji 1..n Niepotrzebne są te pola bo informacja o tym jaki system znajduje się na komputerze jest w tabeli os. Taki przykład: id_os | nazwa_os | id_komp| 1 | linux | 5 | 2 | xp | 5 | No i tu widać, że komputer o ID = 5 ma zainstalowane dwa systemy RE: [HTML][MySQL][PHP]PHP , MySql Tabele i rekordy, Wyciąganie danych - Pedro84 - 08-01-2013 @hieroshima, dalej źle ![]() ![]() RE: [HTML][MySQL][PHP]PHP , MySql Tabele i rekordy, Wyciąganie danych - hieroshima - 08-01-2013 zależy jak na to w zasadzie patrzeć. Każdy OS jest inny (ma inny klucz) i może być tak, że każdy OS jest rozróznialny właśnie przez owy klucz(wiem, że tu w przykładzie tym nie było). Także to zależy jak to ma wyglądać. Z tabelą łączącą to już masz relacje n..n RE: [HTML][MySQL][PHP]PHP , MySql Tabele i rekordy, Wyciąganie danych - Pedro84 - 09-01-2013 (08-01-2013, 23:48)hieroshima napisał(a): zależy jak na to w zasadzie patrzeć. Każdy OS jest inny (ma inny klucz) i może być tak, że każdy OS jest rozróznialny właśnie przez owy klucz(wiem, że tu w przykładzie tym nie było). Także to zależy jak to ma wyglądać. Z tabelą łączącą to już masz relacje n..nŹle na to patrzysz. System operacyjny, tak jak i komputer jest w bazie jeden. To jest obiekt. Możesz mieć różne relacje obiektów, ale nie jest tak, że obiekt jest definiowany poprzez relację. Masz komputer, na którym masz wiele systemów. Systemy mogą być zainstalowane na wielu komputerach. To, że system A jest zainstalowany na komputerze X i Y nie determinuje jego cech, więc założenie relacji 1:m jest błędne. To, że system jest zainstalowany na komputerze X, nie wiąże się z tym, że nie może być zainstalowany na komputerze Y, a z Twojego przykładu to wynika ![]() Edit: Parę dodatkowych komentarzy: - klucz nie jest cechą systemu, jest jego atrybutem - jeśli ma być rozróżnialny po kluczu, to już osobna relacja 1:m - w dalszym ciągu, pomiędzy komputerami i systemami będzie relacja m:m, tylko, że systemy będą dodatkowo determinowane przez relację z kluczami RE: [HTML][MySQL][PHP]PHP , MySql Tabele i rekordy, Wyciąganie danych - hieroshima - 09-01-2013 Wiem, że z mojego przykładu to wynika i ja właśnie podałem taki przykład bo tak chciałem aby to było rozwiązane(teraz widze, że to głupie ![]() |