Ocena wątku:
  • 0 głosów - średnia: 0
  • 1
  • 2
  • 3
  • 4
  • 5
[HTML][MySQL][PHP]PHP , MySql Tabele i rekordy, Wyciąganie danych
#1
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
Odpowiedz
#2
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
Odpowiedz
#3
Tylko właśnie muszę przyjąć iż w komputer muszę przechowywać dwa systemy operacyjne (ID_OS1_k , ID_OS2_k)
Odpowiedz
#4
@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.
Dobre samopoczucie w tym tygodniu sponsoruje cytat:
Cytat:Mogę tylko tylko na prawo i lewo ale na środek nie mogę.
Odpowiedz
#5
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
Odpowiedz
#6
@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).
Dobre samopoczucie w tym tygodniu sponsoruje cytat:
Cytat:Mogę tylko tylko na prawo i lewo ale na środek nie mogę.
Odpowiedz
#7
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
Odpowiedz
#8
(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
Dobre samopoczucie w tym tygodniu sponsoruje cytat:
Cytat:Mogę tylko tylko na prawo i lewo ale na środek nie mogę.
Odpowiedz
#9
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.
Odpowiedz


Podobne wątki…
Wątek: Autor Odpowiedzi: Wyświetleń: Ostatni post
  Jak zrobć POP-UP w html/php i proste pytanko html? MrOMGWTF 7 5,559 01-05-2021, 10:56
Ostatni post: wozniak
  Strona HTML na zaliczenie - dodaj, usuń, edytuj Kurana 1 2,088 01-07-2019, 03:31
Ostatni post: mpire
  [HTML] Filmik zamiast obrazka wyróżniającego kuklaale 1 2,754 02-11-2016, 18:36
Ostatni post: martt4dg
  Problem zm osadzeniem skryptu lighbox w kodzie html gajowy873 2 3,703 24-09-2016, 02:22
Ostatni post: Anatol64
  [CSS][HTML] Ustawienie obrazka z boku strony Witek7777 8 8,463 22-09-2016, 01:05
Ostatni post: pocahontas

Skocz do:


Użytkownicy przeglądający ten wątek: 1 gości
Sponsorzy i przyjaciele
SeoHost.pl