Projektowanie tabel SQL

Powolutku tworzę stronkę we flashu i żeby poszerzyć horyzonty pragnę połączyć flash z bazą MySQL zamiast starego modelu z XML.

Dało by mi to możliwość edycji zawartości bezpośrednio na stronie, itp.

Wykorzystuje ona kilka plików XML, każdy jest w innym języku i posiada następującą strukturę (część tekstu została usunięta):

Do komunikacji pomiędzy klientem a serwerem używam amfphp.

Mógłby mi ktoś pomóc zaprojektować tabele SQL, tak aby można było z nich korzystać z zachowaniem hierarchii XML?

Zależy mi na łatwym pobraniu rekordów, by stworzyć menu oraz dodawać kategorie i strony w locie; no i obsługę wielu języków.

PS. moja przygoda z php zaczęła się wczoraj.

Podstawowa różnica pomiędzy XMLem, a SQLem jest taka, że XML jest właśnie hierarchiczny, natomiast bazy SQL są relacyjne. Stąd też odwzorowanie jednego typu na drugi często bywa bardzo kłopotliwe.

CREATE TABLE `categories` (

	`categorie_id` INT NOT NULL AUTO_INCREMENT PRIMARY KEY ,

	`id` VARCHAR( 255 ) NOT NULL ,

	`caption` VARCHAR( 255 ) NOT NULL ,

	`icon` VARCHAR( 255 ) NOT NULL ,

	`description` VARCHAR( 255 ) NULL ,

	`sound` VARCHAR( 255 ) NULL

) TYPE = MYISAM ;


CREATE TABLE `pages` (

	`page_id` INT NOT NULL AUTO_INCREMENT PRIMARY KEY ,

	`category_id` INT NOT NULL ,

	`id` VARCHAR( 255 ) NOT NULL ,

	`color` CHAR( 8 ) NULL ,

	`label` VARCHAR( 255 ) NOT NULL ,

	`icon` VARCHAR( 255 ) NULL ,

	`text` TEXT NOT NULL ,

	`obrazek` VARCHAR( 255 ) NOT NULL

) TYPE = MYISAM ;


CREATE TABLE `news` (

	`news_id` INT NOT NULL AUTO_INCREMENT PRIMARY KEY ,

	`data` DATE NOT NULL ,

	`tresc` TEXT NOT NULL

) TYPE = MYISAM ;

to tylko szkielet z przykładowymi możliwościami, i pewnie będziesz musiał w nim sporo pozmieniać

Ciekawe… dziękuję za wkład.

Szybkie pytanka:

Utworzenie tych tabel jest możliwe w jednym zapytaniu?

Czy raz utworzona tabela jest nadpisywana?

Czyli za każdym razem jedna tabela musi odpytać drugę przez ID?

Co oznacza TYPE = MYISAM ?

Jaka jest różnica pomiędzy NOT NULL a NULL?

Jak ułożyć zapytanie, by otrzymać wynik, który możnaby wysłać do flash?

nie, mysql_query zezwala na tylko jedne zapytanie

gdybyś próbował zrobić CREATE TABLE nazwa, gdzie nazwa to nazwa już istniejącej tabeli dostał byś błąd, czyli tabele nie są nadpisywane, ale można je edytować (zapytanie ALTER TABLE)

nie musi, ale właśnie to nazywamy relacją, dzięki takiej relacji jesteśmy w stanie zbudować pseudo hierarchię - category_id w tabeli pages wskazuje na odpowiednią kategorię, w ten sposób stając się odpowiednikiem dziecka dla nodu category z Twojego XMLa

w MySQL istnieje niestety kilka metod składowych (np. MyISAM, InnODB), różnią się pomiędzy sobą różnymi rzeczami (przykładowo w InnODB wspiera transakcje, których nie ma w MyISAM)

do pola z atrybutem NULL można nie wpisać wartości. pola z atrybutem NOT NULL muszą zawsze mieć podaną wartość

nie wiem :wink: nigdy się flashem nie zajmowałem :wink: nie mam pojęcia jakie są wymagania :wink:

    function getOutline() {$array = array();$result = mysql_query ('SELECT *