Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Prośba o sprawdzenie i wykrycie błędu
Forum PHP.pl > Forum > Bazy danych > MySQL
plmorpheus
Witam, jestem całkiem początkujący w tej materii i przepraszam jeśli piszę w złym dziale albo to co piszę jest zbyt banalne.

Mam coś takiego:

1. Stworzyliśmy bazę danych o nazwie „lokatorzy” składającą się z trzech tabel, przedstawionych poniżej.
W bazie danych zawarte są relacje, klucze główne oraz klucze obce.

Tabela 1
nr mieszkania nazwisko wielkość mieszkania [m3] PESEL
5 Aneta Kwiatkowska 56 79052122194
3 Edward Starecki 35 81011981846
6 Janusz Kania 70 75100215426
1 Tadeusz Nowy 70 64061302189
7 Anna Kwiatek 56 59111038721
2 Ewelina Mazur 35 83032923870
4 Jan Lasek 35 82090158742
8 Maria Kowalska 56 73080749021

Tabela 2
nazwisko wielkość mieszkania [m3] piętro nr mieszkania
Tadeusz Nowy 70 1 1
Ewelina Mazur 35 1 2
Edward Starecki 35 2 3
Jan Lasek 35 2 4
Anna Kwiatek 56 2 5
Aneta Kwiatkowska 70 3 6
Anna Kwiatek 56 4 7
Maria Kowalska 56 4 8

Tabela 3
PESEL nr mieszkania Ilość pokoi
64061302189 1 3
83032923870 2 1
81011981846 3 1
82090158742 4 1
79052122194 5 2
75100215426 6 3
59111038721 7 3
73080749021 8 2

2. Tworzymy bazę danych o nazwie „lokatorzy”
create database lokatorzy;
3. Tworzymy tabele w bazie danych „lokatorzy”:
a) o nazwie „wlascicielMieszkania”
create table wlascicielMieszkania
(
nrMieszkania int not null auto_increment primary key,
nazwisko varchar (40),
wielkoscMieszkania varchar (2),
pesel varchar (11)
)
type=InnoDB;

cool.gif o nazwie „pietra”
create table pietra
(
Nazwisko varchar (40),
wielkoscMieszkania varchar (2),
pietro varchar (1),
nrMieszkania int not null references wlascicielMieszkania (nrMieszkania),
primary key (nazwisko)
)
type=InnoDB;

c) o nazwie „pokoje”
create table pokoje
(
pesel int not null auto_increment primary key,
nrMieszkania int not null references wlascicielMieszkania (nrMieszkania),
iloscPokoi varchar (1)
)
type=InnoDB;

4. Wstawiamy dane do tabeli:


Po wybraniu bazy danych „lokatorzy”:
use lokatorzy;
wstawiamy dane do poszczególnych tabel:
a) wstawiamy dane do tabeli „wlascicielMieszkania”
insert into wlascicielMieszkania values
(‘5’, ‘Aneta Kwiatkowska’, ‘56’, ‘79052122194’),
(‘3’, ‘Edward Starecki’, ‘35’, ‘81011981846’),
(‘6’, ‘Janusz Kania’, ‘70’, ‘75100215426’),
(‘1’, ‘Tadeusz Nowy’, ‘70’, ‘64061302189’),
(‘7’, ‘Anna Kwiatek’, ‘56’, ‘59111038721’),
(‘2’, ‘Ewelina Mazur’, ‘35’, ‘83032923870’),
(‘4’, ‘Jan Lasek’, ‘35’, ‘82090158742’),
(‘8’, ‘Maria Kowalska’, ‘56’, ‘73080749021’);
cool.gif wstawiamy dane do tabeli „pietra”
insert into pietra values
(‘Tadeusz Nowy’, ‘70’, ‘1’, ‘1’),
(‘Ewelina Mazur’, ‘35’, ‘1’, ‘2’),
(‘Edward Starecki’, ‘35’, ‘2’, ‘3’),
(‘Jan Lasek’, ‘35’, ‘2’, ‘4’),
(‘Aneta Kwiatkowska’, ‘56’, ‘2’, ‘5’),
(‘Janusz Kania’, ‘70’, ‘3’, ‘6’),
(‘Anna Kwiatek’, ‘56’, ‘4’, ‘7’),
(‘Maria Kowalska’, ‘56’, ‘4’, ‘8’);
c) wstawiamy dane do tabeli „pokoje”
insert into pokoje values
(‘64061302189’, ‘1’, ‘3’),
(‘83032923870’, ‘2’, ‘1’),
(‘81011981846’, ‘3’, ‘1’),
(‘82090158742’, ‘4’, ‘1’),
(‘79052122194’, ‘5’, ‘2’),
(‘75100215426’, ‘6’, ‘3’),
(‘59111038721’, ‘7’, ‘3’),
(‘73080749021’, ‘8’, ‘2’);

i tutaj przy wstawieniu w phpmyadminie do konsoli mysql polecenia "c" (to powyżej) pojawia się komunikat "#1062 - Duplicate entry '2147483647' for key 'PRIMARY'"
nie wiem o co chodzi z tym "2147483647" bo nigdzie nic takiego nie wpisywałem blinksmiley.gif POMOŻCIE O CO TUTAJ CHODZI I GDZIE JEST BŁAD HELP!!
mortus
Przede wszystkim to baza danych jest źle zaprojektowana i nie ma sensu tutaj niczego poprawiać. Tak na dobrą sprawę wszystko można zrobić w dwóch tabelach. W jednej trzymamy dane właścicieli mieszkania, a w drugiej dane dotyczące danego mieszkania tj. na którym ono jest piętrze, jaką ma powierzchnię, ile jest w tym mieszkaniu pokoi, i oczywiście kto jest właścicielem (to pole to referencja do tabeli właścicieli). Nie rozumiem, po co to rozdrabnianie na pokoje i piętra?

Odnośnie problemu: czy pole pesel w tabeli pokoje na pewno ma być automatycznie numerowane.
plmorpheus
Cytat(mortus @ 19.04.2010, 22:40:03 ) *
Przede wszystkim to baza danych jest źle zaprojektowana i nie ma sensu tutaj niczego poprawiać. Tak na dobrą sprawę wszystko można zrobić w dwóch tabelach. W jednej trzymamy dane właścicieli mieszkania, a w drugiej dane dotyczące danego mieszkania tj. na którym ono jest piętrze, jaką ma powierzchnię, ile jest w tym mieszkaniu pokoi, i oczywiście kto jest właścicielem (to pole to referencja do tabeli właścicieli). Nie rozumiem, po co to rozdrabnianie na pokoje i piętra?

Odnośnie problemu: czy pole pesel w tabeli pokoje na pewno ma być automatycznie numerowane.



Taki jest niestety wymóg, żeby były 3 tabele :/ co do autonumerowania - nie jest to autinumerowanie tylko nr mieszkania - po prostu tak się ułożyło, że wygląda to jak autonumerowanie...
mortus
Cytat
create table pokoje
(
pesel int not null auto_increment primary key,
nrMieszkania int not null references wlascicielMieszkania (nrMieszkania),
iloscPokoi varchar (1)
)
type=InnoDB;

Przecież jak byk pisze, że auto_increment.
Czyj wymóg i jaki wymóg? Bo jeśli jedynym wymogiem jest stworzenie trzech tabel to i tak można to lepiej zorganizować. No chyba, że ktoś wymaga, żeby tabele tak właśnie wyglądały. W każdym bądź razie baza danych jest źle zaprojektowana, dane niepotrzebnie się powtarzają, a wydajność zapytań będzie mizerna. Zwolniłbym pracownika, który w taki sposób rozwiązałby problem.
nospor
ale sieczka....

raz PESEL to varchar, raz PESELE to autoincrementowany INT....
Cytat
"#1062 - Duplicate entry '2147483647' for key 'PRIMARY'"
nie wiem o co chodzi z tym "2147483647"

2147483647 to maksymalny rozmiar inta. A ty wkladasz wartosc 64061302189, ktorą mysql konwertuje do max inta czyli do 2147483647. A ze ty wkladasz kilka takich duzych wartosci to masz ciagle 2147483647 stad tez wartosc ci się duplikuje.

iloscPokoi varchar (1)
no przeciez, zawsze rozsądniej jest liczbe zapisac w bazie jako tekst.... winksmiley.jpg

Podsumowując: zgadzam się z mortusem - wywal tę baze do kosza i zaprojektuj od nowa. Jesli ty to robisz na jakieś zaliczenie to od razu masz pałę - no chyba ze wykladowaca nie lepszy od Ciebie - bo jesli ty te wiedze z jego wykladow wyniosles.... winksmiley.jpg
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.