![]() |
![]() |
![]() ![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 6 Pomógł: 0 Dołączył: 5.01.2005 Ostrzeżenie: (0%) ![]() ![]() |
witam wszystkich, dopierozaczynam przygode z mysql
chce utworzyc tabele hasla polaczona z inna tabela klienci, ale wyskakuje mi blad ERROR 1005:Can't create table.......<errno:m 150> czy ktos wie co mam zle?? pomozcie prosze create table hasla (login varchar(15) NOT NULL primary key, haslo text NOT NULL, CONSTRAINT warunek1 FOREIGN KEY (login) REFERENCES klienci(login) ) TYPE=InnoDB; |
|
|
![]() |
![]()
Post
#2
|
|
![]() Grupa: Zarejestrowani Postów: 764 Pomógł: 3 Dołączył: 30.04.2003 Ostrzeżenie: (0%) ![]() ![]() |
Witaj,
Przede wszystkim pokaż cały kod, którym tworzysz strukturę bazy danych. Moje uwagi w tej chwili są następujące: 1) być może tworzysz relację do nieistniejącej tabeli 2) wybor pola text na haslo nie jest najlepszym rozwiazaniem -> najlepiej zastosowac pole typu CHAR (a prawdopodobnie VARCHAR) o dlugosci 32 znakow gdzie bedzie przechowywal haslo poddane dzialaniu funkcji MD5 3) IMHO zastanawiałbym się też czy nie utworzyć klucz sztuczny typu int zamiast loginu jako klucza głównego -> ale to jest kwestia dyskusyjna (osobiście preferuję takie rozwiązanie) Pamiętej, że klucze obce musisz tworzyć na pola indeksowane. Więcej podpowiem Ci jak pokażesz strukturę bazy danych. Pozdrawiam |
|
|
![]()
Post
#3
|
|
![]() Grupa: Przyjaciele php.pl Postów: 2 196 Pomógł: 2 Dołączył: 17.01.2004 Skąd: Sosnowiec Ostrzeżenie: (0%) ![]() ![]() |
To może spróbuj jeśli jesteś tak jak piszesz początkujący po prostu:
-------------------- |
|
|
![]()
Post
#4
|
|
Grupa: Zarejestrowani Postów: 6 Pomógł: 0 Dołączył: 5.01.2005 Ostrzeżenie: (0%) ![]() ![]() |
chce zrobic takie tabele i polaczenia miedzy nimi.
w sumie to juz je zrobilem jakbyscie mogli to sprawdzcie i nap[iszcie czy to sie nadaje, z gory dzieki ----------------------------------------------------------- ----------------------------------------------------------- create table hasla (login varchar(15) NOT NULL, haslo text NOT NULL, PRIMARY KEY (login), CONSTRAINT 1_1 FOREIGN KEY (login) REFERENCES kontrahenci (login)); ___________________________________________ create table kontrahenci ( login varchar(15) NOT NULL, idklienta int NOT NULL PRIMARY KEY AUTO_INCREMENT, nazwa varchar(20) NOT NULL, adres varchar(20) NOT NULL, miasto varchar(20) NOT NULL, kod_pocztowy int(5) NOT NULL default '0', regon int NOT NULL default '00000', kraj text, CONSTRAINT 1_2 FOREIGN KEY (idklienta) REFERENCES zamowienie(idklienta)); ------------------------------------------------------ create table zamowienie ( idzamowienia int NOT NULL PRIMARY KEY AUTO_INCREMENT, idklienta int NOT NULL, idtowaru int NOT NULL, data_zamowienia date NOT NULL default '0', sposob_platnosci enum('gotowka','czek','raty','odroczony_termin'), idstatus int NOT NULL, CONSTRAINT 1_2 FOREIGN KEY (idtowaru) REFERENCES towary(idtowaru)); ------------------------------------------------------ create table status ( idstatus int NOT NULL PRIMARY KEY AUTO_INCREMENT, nazwa enum('zrealizowane','realizowane','niezrealizowane','nieznane'), CONSTRAINT 1_4 FOREIGN KEY (idstatus) REFERENCES zamowienie(idstatus)); ------------------------------------------------------ create table opis_zamowienia ( idzamowienia int NOT NULL PRIMARY KEY, idtowaru int NOT NULL, cena int NOT NULL default '0', ilosc int NOT NULL default'0', rabat int NOT NULL default'0', CONSTRAINT 1_5 FOREIGN KEY (idzamowienia) REFERENCES zamowienia(idzamowienia)); -------------------------------------------------- create table towary ( idtowaru int NOT NULL PRIMARY KEY AUTO_INCREMENT, iddostawcy int NOT NULL, nazwa varchar(20) NOT NULL, cena int NOT NULL default '0', ilosc int NOT NULL default'0', data_przyjecia date NOT NULL default '0', idrodzaj int NOT NULL, CONSTRAINT 1_6 FOREIGN KEY (iddostawcy) REFERENCES dostawca(iddostawcy)); ----------------------------------------------------- create table dostawca ( iddostawcy int NOT NULL PRIMARY KEY AUTO_INCREMENT, nazwa varchar(20) NOT NULL, adres varchar(20) NOT NULL, miasto varchar(20) NOT NULL, kod_pocztowy int(5) NOT NULL default '0', regon int NOT NULL default '00000', kraj text, ); --------------------------------------------------- create table kategoria ( idrodzaj int NOT NULL PRIMARY KEY AUTO_INCREMENT, nazwa varchar(20) NOT NULL, CONSTRAINT 1_6 FOREIGN KEY (idrodzaj) REFERENCES towary(idrodzaj)); |
|
|
![]()
Post
#5
|
|
![]() Grupa: Zarejestrowani Postów: 764 Pomógł: 3 Dołączył: 30.04.2003 Ostrzeżenie: (0%) ![]() ![]() |
kurcze.. musze jeszcze raz napisac odpowiedz gdyz cos sie podzialo z serwerem i nie udalo mi sie wyslac opowiedzi....
raz jeszcze... przede wszystkim widze, ze usunales (przynajmniej z tabeli hasla) typ definiowanej tabeli -> jezeli uzywasz mysql w wersji 4.0.xx lub starszej oznacza to ze definiujesz tabele typu MyISAM ktora to nie obsluguje mozliwosci zakladania kluczy obcych (chociaz sama tabela zostanie zdefiniowana prawidlowo) w zwiazku z tym w projekcie bazy danych bez sensu jest definiowanie kluczy obcych, w chwili obecnej masz 2 wyjscia: - albo zapominasz o definiowaniu kluczy obcych i usuwasz z projektu definicje kluczy ----> korzystasz wowczas z typu MyISAM - albo przykladasz sie porzadnie do projektu bazy danych, korzystasz z InnoDB i tworzysz relacje pomiedzy tabelami... jezeli jednak chcesz zrobic to drugie to musisz spelnic kilka warunkow: - tabele zdefiniowane musza byc po kolei (jezeli beda w takiej kolejnosci jak teraz beda pokazywac Ci sie takie same komunikaty jak wczesniej) - na klucze obce musisz pozakladac indeksy gdyz w przeciwnym wypadku mysql bedzie wyrzucal bledy teraz kilka slow o projekcie bazy danych: 1) IMHO jest do poprawy przebudowy - spawdziles czy to co wrzuciles do swojej wiadomosci wykonuje sie prawidlo? nie sadze gdyz w tabeli dostawca masz blad:, po definicji pola kraj typu text (swoja droga troche bez sensu) nie moze byc znaku przecinka 2) wg mnie wybor typow niektorych pol jest bez sensu: np. dla pola kraj po co Ci pole typu text? takich przykladow moge wymienic wiecej np: nazwa varchar(20) NOT NULL, adres varchar(20) NOT NULL, miasto varchar(20) NOT NULL, od reki moge wymienic Ci klka firm gdzie nazwa ich jest wieksza od 20 znakow, podobnie jest z adresem czy tez w koncu z nazwami miast... spokojnie mozna znalezc przyklady gdzie w starciu z rzeczywistoscia Twoj projekt bazy danyc polegnie bardzo podobna sytuacja jest przy kontrahenrach mam takie wrazenie ze oszczedzasz tam gdzie nie powinienes a tam gdzie moglbys tego nie robisz (wspomniane juz wczesniej haslo czy w koncu tez wspomniana definicja pola kraj) 3) do tej pory zastanawiam sie po co Ci definicja tabeli hasla - czy po to by kontrahenci mogli sie logowac gdzies tam? czy w takim bardz razie nie przenies tego do tabeli kontrahenci? 4) nazwy tabel: zamowienie, dostawca, kategoria powinny kolejno byc: zamowienia, dostawcy, kategorie - moze jest to juz jakis niuans ale w kazdej ksiazce o projektowaniu baz danych znajdziesz kilka uwag do odpowiedniego nadawania nazw tabel czy kolumn w chwili obecnej to z grubsza to co rzucilo mi sie do oczu... zastanowie sie czy na pewno chcesz wykorzystac mozliwosc definiowania relacji pomiedzy tymi tabelami w mysql'u -> jezeli tak to zrob to porzadnie, no i w koncu zastanow sie nad projektem bazy danych... w razie watpliwosci i pytan pisz pozdrawiam |
|
|
![]()
Post
#6
|
|
Grupa: Zarejestrowani Postów: 6 Pomógł: 0 Dołączył: 5.01.2005 Ostrzeżenie: (0%) ![]() ![]() |
dzieki Ci serdeczne, bede probowal jak cos to bede pisal i pytal
pozdrawiam |
|
|
![]() ![]() |
![]() |
Aktualny czas: 21.08.2025 - 17:41 |