Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> relacje miedzy tabelami, klucze
zietek
post
Post #1





Grupa: Zarejestrowani
Postów: 34
Pomógł: 1
Dołączył: 25.12.2007

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


Witam!


Tabela 1. Producenci

Kod
ID MARKA

1 Sony
2 Samsusng
3 Lg



Tabela 2. Towary

Kod
ID ID_PRODUCENTA NAZWA

1             2 monitor
2             2 telewizor
3             3 dvd-rom



Do tej pory dane wybieralem przy pomocy LEFT JOIN:

  1. SELECT Towary.ID
  2. Towary.ID_PRODUCENTA
  3. Towary.NAZWA
  4. Producenci.MARKA
  5. LEFT JOIN Producenci ON Producenci.ID = Towary.ID_PRODUCENTA
  6. FROM Towary


Stosujac ujemne wartosci w polu ID_PRODUCENTA (nie majace odpowiednikow w tabeli Producenci) okreslam np:
ID_PRODUCENTA = -1 gdy nieznany producent z terenu Europy
ID_PRODUCENTA = -2 gdy nieznany producent z terenu Azji
itd...

W takich przypadkach otrzymuje w wynikowym zapytaniu pole MARKA wypelnione wartoscia NULL a ujemna wartosc pola ID_PRODUCENTA wskazuje jaki

komunikat ma zostac wyswietlony przy danym produkcie z powodu braku producenta.

Minusem tej 'calej zabawy' jest koniecznosc sprawdzania przy usuwaniu rekordow z tabeli Producenci, czy nie ma jakis rekordow w tabeli Towary

podpietych pod usuwanego producenta.


Zdaje sobie sprawe, ze mozna to wykonac w sposob bardziej profesjonalny przy wykorzystaniu kluczy i relacji laczacych obie tabele.

Moze mi ktos podsunac pomysl?
Czy jest mozliwosc utowrzenia takiej relacji, ktora nie wymusza posiadania prawidlowego klucza przez tabele podrzedna (chodzi o ujemne

ID_PRODUCENTA)? Jezeli nie, to w jaki sposob rozwiazac ten problem?
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
nevt
post
Post #2





Grupa: Przyjaciele php.pl
Postów: 1 595
Pomógł: 282
Dołączył: 24.09.2007
Skąd: Reda, Pomorskie.

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


przecież nic nie stoi na przeszkodzie, żebyś w tabeli Producenci miał dwa (puste) wpisy dla dla tych producentów z Azji i Europy - wtedy nie musisz kombinować z kluczami nie spełniającymi relacji...

co do kontroli towarów powiązanych z producentem, pole ID_PRODUCENTA w tabeli towary musisz zdefiniować jako klucz obcy z kaskadowym usuwaniem / aktualizacją, czyli stwórz tabele Towary następująco:

  1. CREATE TABLE `Towary` (
  2. `ID` int(10) UNSIGNED NOT NULL AUTO_INCREMENT,
  3. `ID_PRODUCENTA` int(10) UNSIGNED NOT NULL,
  4. `NAZWA` varchar(255) NOT NULL,
  5. PRIMARY KEY USING BTREE (`ID`),
  6. KEY `Producent_key` (`ID_PRODUCENTA`),
  7. CONSTRAINT `Producent_key` FOREIGN KEY (`ID_PRODUCENTA`) REFERENCES `Producenci` (`ID`) ON DELETE CASCADE ON UPDATE CASCADE
  8. );


Ten post edytował nevt 2.03.2008, 13:45:06
Go to the top of the page
+Quote Post

Posty w temacie


Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 27.12.2025 - 17:49