Forum Webmastera, HTML, CSS, PHP, MySQL, Hosting, Domeny - Forum dla Webmasterów
[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 Big Grin

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
OS: ID Nazwa
Komputer_OS: ID_Komputer ID_OS

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 Smile już się poprawiam Smile

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 Wink Przecież jeden OS może należeć do więcej niż jednego kompa Wink Bez tabeli łączącej ani rusz (vide mój post).


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 Wink

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łupieSmile ). Masz racje. Rozrysowałem sobie ten model bazy w datamodelerze i faktycznie musi być tak jak piszesz. Relacja n:m musi być. Dzięki za poprawę i sorry za błędy i mieszanie.