Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Wykorzystanie relacji w bazie
Forum PHP.pl > Forum > Bazy danych
AniaR
Projektuje teraz dość dużą bazę i chcialabym sie upewnic czy dobrze rozumiem pojęcie realcji i kluczy obcych..
Majac dwie tabele:


  1. CREATE TABLE `okregi` (
  2. `id` int(11) NOT NULL AUTO_INCREMENT,
  3. `nazwa` varchar(200) NOT NULL,
  4. PRIMARY KEY (`id`)
  5. ) ENGINE=InnoDB DEFAULT CHARSET=latin2 AUTO_INCREMENT=20 ;



  1. CREATE TABLE `o_biogramy` (
  2. `id` int(11) NOT NULL AUTO_INCREMENT,
  3. `id_okregu` int(11) NOT NULL,
  4. `imie` varchar(200) NOT NULL
  5. PRIMARY KEY (`id`),
  6. KEY `biogramy_id_okregu_IND` (`id_okregu`)
  7. ) ENGINE=InnoDB DEFAULT CHARSET=latin2 AUTO_INCREMENT=5 ;
  8.  
  9. --
  10. -- Ograniczenia dla tabeli `o_biogramy`
  11. --
  12. ALTER TABLE `o_biogramy`
  13. ADD CONSTRAINT `biogramy_id_okregu_FK` FOREIGN KEY (`id_okregu`) REFERENCES `okregi` (`id`);


Tabele o_biogramy polaczylam z tabela okregi nadajac polu id_okregu najpierw INDEX a potem FOREIGN KEY.
To znaczy ze juz utworzylam relacje miedzy tymi tabelami?
Czy pole id w tabeli okregi nie powinno sie nazywac id_okregu? tak samo jak w tabeli o_biogramy?

Chodzi mi o to ze nadajac te relacje w bazie czyli ten klucz obcy i tak dane do bazy wprowadzam w taki sam sposob jak by nie bylo tej relacji.. Czyli:

najpierw odczytuje id okregu ktore jest mi potrzebne a potem
  1. <?php
  2. $query= "INSERT INTO  o_biogramy (id, id_okregu, imie ) values (null, '$id','$imie')";
  3. ?>


Czy nie po to sie tworzy te relacje aby nie trzeba bylo juz podawac samemu tego id_okregu do bazy o_biogramy ?

Bo jezeli nie to jaka jest roznica czy da sie ten FK czy nie skoro i tak wprowadzam i odczytuje dane z bazy w taki sam sposob?

Czy konieczne jest tworzenie kluczy obcych jezeli do tej pory radzilam dobie bez nich?
omeck
Cytat(AniaR @ 8.07.2009, 16:09:18 ) *
Projektuje teraz dość dużą bazę i chcialabym sie upewnic czy dobrze rozumiem pojęcie realcji i kluczy obcych..
...
Tabele o_biogramy polaczylam z tabela okregi nadajac polu id_okregu najpierw INDEX a potem FOREIGN KEY.
To znaczy ze juz utworzylam relacje miedzy tymi tabelami?


tak

Cytat(AniaR @ 8.07.2009, 16:09:18 ) *
Czy pole id w tabeli okregi nie powinno sie nazywac id_okregu? tak samo jak w tabeli o_biogramy?


to nie ma znaczenia - pole możesz nazwać, jak chcesz, byleby tylko klucz główny i obcy były tego samego typu

Cytat(AniaR @ 8.07.2009, 16:09:18 ) *
Chodzi mi o to ze nadajac te relacje w bazie czyli ten klucz obcy i tak dane do bazy wprowadzam w taki sam sposob jak by nie bylo

Czy nie po to sie tworzy te relacje aby nie trzeba bylo juz podawac samemu tego id_okregu do bazy o_biogramy ?

Bo jezeli nie to jaka jest roznica czy da sie ten FK czy nie skoro i tak wprowadzam i odczytuje dane z bazy w taki sam sposob?

Czy konieczne jest tworzenie kluczy obcych jezeli do tej pory radzilam dobie bez nich?


Relacje tworzy się, żeby zachować m.in integralność danych (możesz poczytać chociazby o: http://pl.wikipedia.org/wiki/ACID). Jeśli relacje są zdefiniowane, to np. nie możesz do bazy dodać glupot - nie dodasz do tabelki o_biogramy rekordu, którego pole id_okregu nie wskazuje na klucz główny, który istnieje w bazie. Możesz też ustawić kaskadowe operacje - usuwanie, edycja

Kluczy obcych nie musisz stosować, jeśli korzystasz z mysami, ale... ten silnik to zło snitch.gif trzymaj się innodb guitar.gif
AniaR
Ok, dzieki:)
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.