1. Jako miasto planowałem podstawić jakiś id (np. 1 - Gdańsk, 2 - Gdynia, 3 - Sopot itd.), podobnie chciałem zrobić z województwem (zamiast wysyłać całych nazw jak "Gdańsk"; "Gdynia" itp. > tylko ID).
2. To, że przedrostkiem nazwy jest "id_" coś zmienia?
3. Jak będę wysyłał dane z formularza to będę musiał osobno wysyłać dane do poszczególnych tabel?
ad 1) I tak właśnie jest. Zauważ, że dlatego mam id zawsze indeksowane, by wyszukiwanie jeszcze przyspieszyć.
ad 2) Nie zmienia nic. To jest dla czytelności kodu. Wiesz wtedy co jest kluczem do innej tabeli.
ad 3) Poczytaj o UPDATE to się sam dowiesz czy możesz tak zrobić czy nie.
Źle. Po pierwsze to mnóstwo razy text używasz, co już "na dzień dobry" spowalnia działanie bazy. Ogranicz się gdzie możesz do varchar. Miasto i wojewódzwo w tabeli firma to mają być INT, bo łączysz je po numerze województwa i numerze miasta. Właściwie to nawet w przypadku województwa możesz tinyint dać. Po co zmieniasz z mojego przykładu rzeczy

CREATE TABLE `firma` (
`id` INT NOT NULL AUTO_INCREMENT ,
`nazwafirmy` varchar(100) NOT NULL ,
`ulica` varchar(100) NOT NULL ,
`miasto` int NOT NULL ,
`wojewodztwo` tinyint NOT NULL ,
`email` varchar(75) NOT NULL ,
`www` varchar(75) NOT NULL ,
`godzponpt` varchar(15) NOT NULL ,
`godzsob` varchar(15) NOT NULL ,
`godznd` varchar(15) NOT NULL ,
`opis` TEXT NOT NULL ,
`data` VARCHAR( 50 ) NOT NULL ,
PRIMARY KEY ( `id` ),
INDEX ( miasto ),
INDEX ( wojewodztwo )
);
CREATE TABLE `rodzaj` (
`id` int NOT NULL AUTO_INCREMENT ,
`id_firmy` int NOT NULL ,
`nazwa_kategorii` varchar(50) NOT NULL ,
PRIMARY KEY ( `id` )
);
CREATE TABLE `telefon` (
`id_firmy` INT NOT NULL ,
numer_telefonu varchar(15) NOT NULL ,
INDEX ( `id_firmy` )
);
CREATE TABLE `wojewodztwo` (
`id` tinyint NOT NULL AUTO_INCREMENT ,
`nazwa_wojewodztwa` varchar(30) NOT NULL ,
PRIMARY KEY ( `id` )
);
CREATE TABLE `miasto` (
`id` INT NOT NULL AUTO_INCREMENT ,
`id_wojewodztwa` tinyint NOT NULL ,
`nazwa_miasta` TEXT NOT NULL ,
PRIMARY KEY ( `id` ),
INDEX ( `id_wojewodztwa` )
);
To tak ze zmianami na szybko... A czemu? Bo niezbyt jeszcze się orientujesz. Operacje na tekstach są wolniejsze niż na liczbach. Można to przyspieszyć poprzez tworzenie indexów na nich, ale index na danych testowych ma sens przy tworzeniu porządnej wyszukiwarki w oparciu o FULLTEXT. Poczytasz, wprawisz się to wtedy się za to weźmiesz. Na razie opanuj podstawy. dlaczego wywaliłem Ci drugi numer teleonu i zmieniłem nazwę z id na id_firmy? Bo co zrobisz jeśli do firmy masz nie 1 lub 2 ale 7 numerów? Dodasz kolejne pola? Nie w tabeli dodasz kolejny rekord. Po prostu zapytasz tabelkę: "Podaj mi wszystkie numery gdzie id_firmy równa się X". Nie prościej? W województwie wywaliłem id bo skoro jest id i id_województwa to te dane się dublują, więc jedna z kolumn zbędna. Nie wiem co to jest rodzaj, ale domyślam, że to typ działalności firmy (informatyczna, budowlana etc.), więc dorzuciłem jeszcze jedną tabelę I tu podobnie jak z telefonami, możesz przypisać firmę do kilku typów działalności. dopiero porządne zastanowienie się CO ma zawierać baza, JAK ma działać od strony użytkownika, ILE danych ma określonych zawierać sprawia, że się modeluje ją. Ja podałem Ci jak mniej więcej to widzę, ale dopiero znając dokładnie jej model zachowania, można ulepszać dalej.