Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Relacje
Forum PHP.pl > Forum > Bazy danych > MySQL
piratt
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
TomASS
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.
SongoQ
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.
piratt
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
NoiseMc
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.
popo
erm 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 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
SongoQ
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.
piratt
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ł
popo
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
NoiseMc
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.
SongoQ
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.
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.