Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Relacje, Jak ustawic relacje? Klucze obce/indeksy
piratt
post
Post #1





Grupa: Zarejestrowani
Postów: 20
Pomógł: 0
Dołączył: 28.09.2005

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


Witam

Cala baze danych tworze poprzez wykonanie pliku .sql

Mam nastepujace pytania:

1. Czy plik .sql mozna wykonac poprzez php?
2. Czy mozna tworzyc relacje bezposrednio .sql'em?
3. Jak dokladnie dziala 'Widok relacyjny' z phpMyAdmina? Chodzi mi konkretnie o 'wewnetrzne relacje', 'innoDB', 'wybierz wyswietlane pole'? W ktora strone dzialaja ktore relacje? Od tabeli "przegladanej" do tych pozostalych? Czy odwrotnie? Co oznacza dymek "brak zdefiniowanego indeksu"? Bo juz sie troche pogubilem(do tej pory intuicyjnie korzystalem z kluczy obcych o tych samych nazwach co klucz z tabeli 'obcej' ale teraz mi zalezy zeby ta nazwa byla inna) a nigdzie nie moge znalezc pomocy na ten temat.
Ma ktos moze jakis gotowy przyklad/opis ustawiania tych relacji?

Z gory dziekuje za odpowiedz
Pozdrawiam
Michał Malus

Ten post edytował piratt 4.10.2005, 21:02:42
Go to the top of the page
+Quote Post
TomASS
post
Post #2





Grupa: Zarejestrowani
Postów: 1 660
Pomógł: 13
Dołączył: 9.06.2004
Skąd: Wrocław i okolice

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


Cytat
1. Czy plik .sql mozna wykonac poprzez php?

Można

Cytat
2. Czy mozna tworzyc relacje bezposrednio .sql'em?

Mnie się wydaje, że MySQL nie jest typową "relacyjną bazą danych", relacje można tworzyć w zapytaniach - przy każdym zapytaniu.

Cytat
3. Jak dokladnie dziala 'Widok relacyjny' z phpMyAdmina? Chodzi mi konkretnie o 'wewnetrzne relacje', 'innoDB', 'wybierz wyswietlane pole'? W ktora strone dzialaja ktore relacje? Od tabeli "przegladanej" do tych pozostalych? Czy odwrotnie? Co oznacza dymek "brak zdefiniowanego indeksu"? Bo juz sie troche pogubilem(do tej pory intuicyjnie korzystalem z kluczy obcych o tych samych nazwach co klucz z tabeli 'obcej' ale teraz mi zalezy zeby ta nazwa byla inna) a nigdzie nie moge znalezc pomocy na ten temat.
Ma ktos moze jakis gotowy przyklad/opis ustawiania tych relacji?

Nawet nie wiedziałem, że MyAdmin ma takie coś :/ akurat w tym Ci nie pomogę - sory.
Go to the top of the page
+Quote Post
SongoQ
post
Post #3





Grupa: Przyjaciele php.pl
Postów: 2 923
Pomógł: 9
Dołączył: 25.10.2004
Skąd: Rzeszów - studia / Warszawa - praca

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


Cytat
Mnie się wydaje, że MySQL nie jest typową "relacyjną bazą danych", relacje można tworzyć w zapytaniach - przy każdym zapytaniu.

Typowa to moze nie jest. Troszeczke mylisz pojecie co do relacji.
Go to the top of the page
+Quote Post
piratt
post
Post #4





Grupa: Zarejestrowani
Postów: 20
Pomógł: 0
Dołączył: 28.09.2005

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


Hmm, troche powyzsze wypowiedzi nic nie wniosly do tematu;)

A co do relacji to chyba sa wlasnie po to zeby w zapytaniach miec mniej roboty do wykonania.. engine bazy sam 'domysla sie' jak ma traktowac pola, ktore sa powiazane.

Znalazlem strony http://dev.mysql.com/doc/mysql/en/alter-table.html oraz http://dev.mysql.com/doc/mysql/en/innodb-f...onstraints.html i probuje zrozumiec jak to jest z tymi relacjami w mysql'u.. ale jakby ktos mial jakies informacje to bylbym wdzieczny.

Pozdrawiam
Michal
Go to the top of the page
+Quote Post
NoiseMc
post
Post #5





Grupa: Zarejestrowani
Postów: 398
Pomógł: 10
Dołączył: 24.11.2004
Skąd: Łódź

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


W MySQL 4.1 tabele InnoDB można wiązać między sobą nakładając na nie odpowiednie ograniczenia.

To znaczy, że jeżeli na przykład tabelę x powiążesz z tabelą y polami: kluczem głównym tabeli x: x.xID i kluczem obcym tabeli y: y.xID, relacją x 1 do y wielu i tabela y będzie zawierała kilka rekordów należących do rekordu z tabeli x to ustawiając odpowiednie ograniczenia jak np. usuniesz rekord z tabeli x to automatycznie z tabeli y zostaną usunięte wszystkie powiązane rekordy, a próbując usunąć z tabeli y rekord przyporządkowany rekordowi z tabeli x baza poinformuje Cię o błędzie że nie można usuwać powiązanego rekordu.

Na tym między innymi polega działanie relacyjnej bazy danych.

Ten post edytował NoiseMc 4.10.2005, 22:42:17
Go to the top of the page
+Quote Post
popo
post
Post #6





Grupa: Zarejestrowani
Postów: 85
Pomógł: 0
Dołączył: 15.07.2005

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


erm (IMG:http://forum.php.pl/style_emoticons/default/dry.gif) relacje - zaleznosci pomiedzy tabelami
przy tworzeniu tabel mozna okreslic relacje (constraint) pomiedzy nimi i wtedy baza pilnuje zebys wprowadzajac, usuwajac i modyfikujac czegos nie zepsul np nie pozwala usunac rekordu do ktorego odwolujemy sie w inej tabeli

a co do odpowiedzi na pytanie to mysql obsluguje przynajmniej czesciowo relacje

ad 2 tak np.
ALTER TABLE `xxx`
ADD CONSTRAINT `nazwarelacji` FOREIGN KEY (`pole_w_xxx`) REFERENCES `yyy` (`pole_w_yyy`);

ad 3

co do tego dymka to pola powiazane relacja w obu tabelach musza miec indeksy no i byc tego samego typu (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)

aby w phpmyadminie ustawic relacje pomiedzy 2 tabelami musisz wejsc na tabele ktora ma sie odwolywac do wartosci z innej tabeli w moim przykladzie xxx wchodzisz w widok relacyjny i pokazuja ci sie wszystkie pola ktore mozesz wykorzystac do stworzenia relacji w kolumnie z innodb wybierasz z menu tabele i pole z ktorego wartosci maja byc pobierane (yyy->pole_w_yyy) nastepnie tryb relacji standartowo jest restrict (jak nic nie wybierzesz tez o ile dobrze pamietam) po stworzeniu relacji nie uda ci sie dodac wartosci do pole_w_xxx jesli nie bedzie ona wystepowala w pole_w_yyy jesli oczywiscie ustawiles typ relacji na restrict ale o tym jak toto dziala w mysqlu jest w manualu od tejrze bazy

btw obsluga widoku relacyjnego phpmyadmina jest w helpie od phpmyadmina opisane

Edit
widze ze ciutke wolno to pisalem (2 posty wskoczyly) ale opis uzycia phpmyadmina chyba sie do czegos przyda

Ten post edytował popo 4.10.2005, 22:47:35
Go to the top of the page
+Quote Post
SongoQ
post
Post #7





Grupa: Przyjaciele php.pl
Postów: 2 923
Pomógł: 9
Dołączył: 25.10.2004
Skąd: Rzeszów - studia / Warszawa - praca

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


Cytat
A co do relacji to chyba sa wlasnie po to zeby w zapytaniach miec mniej roboty do wykonania..

Glupoty gadasz. Czy masz 2 tabele powiazane czy nie dalej tak samo zapytanie wyglada. Relacja to jest fizyczne wymuszenie pewnych wiezi medzy rekordami tabel, to co pisal @NoiseMc. Radze poczytac lepiej o relacyjnych bazach danych.

A odnosnie jak to jest w MySQLu to tak jak w kazdej bazie klucz podstawowy i klucz obcy. Chyba nie musze tlumaczyc jak dziala.

Wydaje mi sie ze problem masz w opanowaniu samego interfejsu phpmyadmina a nie stworzenie powiazan. Zawsze Ci zostaje SQL.
Go to the top of the page
+Quote Post
piratt
post
Post #8





Grupa: Zarejestrowani
Postów: 20
Pomógł: 0
Dołączył: 28.09.2005

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


Dziekuje za wszystkie odpowiedzi, w zasadzie jest juz wszystko jasne.

Cytat
Glupoty gadasz. Czy masz 2 tabele powiazane czy nie dalej tak samo zapytanie wyglada. Relacja to jest fizyczne wymuszenie pewnych wiezi medzy rekordami tabel, to co pisal @NoiseMc. Radze poczytac lepiej o relacyjnych bazach danych.


Po prostu przyzwyczajenia z Accessa, ktory na podstawie ustalonych relacji pomaga automatycznie tworzyc zapytania SQL. Ale racja, to nie mechanizm relacyjnych baz danych tylko accessa;)

Jeszcze tylko jakby mogl ktos napisac jak najlatwiej wykonac plik .sql (tu byl blad w poscie, nie chodzilo mi o plik accessa tylko zwykly plik .sql). Jest do tego jakies gotowe narzedzie czy trzeba wczytac plik, odpowiednio parsowac i przekazywac do mysql_query?

Pozdrawiam
Michał

Ten post edytował piratt 4.10.2005, 23:08:44
Go to the top of the page
+Quote Post
popo
post
Post #9





Grupa: Zarejestrowani
Postów: 85
Pomógł: 0
Dołączył: 15.07.2005

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


co do relacji wewnetrznych sa to relacje pomiedzy 'kolumnami' ze tak to nazwe w obrebie tej samej tabeli np moze byc tabela userzy z w postaci username,xxx,yyy,ostatnio_modyfikowal
i w tym prymitywnym przypadku ustawiamy relacje pomiedzy username i ostatnio_modyfikowal tak aby ta ostatnia mogla zawierac nazwy istniejacych userow czyli wartosci z kolumny username

Edit
erm co do importu plikow sql z accesa to jesli jest ten plik zgodny z sql92 i nie ma tam specyficznych dla accesa typow danych czy operacji (jesli sa to nie jest zgodny z sql 92) to zaimportowanie go do mysqla nie powinno byc problemem z phpmyadmin wybierasz sql wklejasz zapytanie i po robocie powinno zaskoczyc

Ten post edytował popo 4.10.2005, 23:06:50
Go to the top of the page
+Quote Post
NoiseMc
post
Post #10





Grupa: Zarejestrowani
Postów: 398
Pomógł: 10
Dołączył: 24.11.2004
Skąd: Łódź

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


Jest kilka programów do zarządzania MySQL - em, z opcją importu danych z Accessa za pomocą ODBC.

Tu wynik z Google
http://dev.mysql.com/downloads/
http://www.sqlmanager.net/products/mysql/manager

i wiele innych.
Go to the top of the page
+Quote Post
SongoQ
post
Post #11





Grupa: Przyjaciele php.pl
Postów: 2 923
Pomógł: 9
Dołączył: 25.10.2004
Skąd: Rzeszów - studia / Warszawa - praca

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


Cytat
Po prostu przyzwyczajenia z Accessa, ktory na podstawie ustalonych relacji pomaga automatycznie tworzyc zapytania SQL. Ale racja, to nie mechanizm relacyjnych baz danych tylko accessa;)

Ale pod tym i tak kryje sie SQL gdzie wszystko jest standardowo.
Go to the top of the page
+Quote Post

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: 16.10.2025 - 22:07