Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP][MySQL]Relacje w bazach danych
Forum PHP.pl > Forum > Przedszkole
miszarus
Witam, serdecznie
Pragnę utworzyć bazę danych z takimi oto tabelami:

  1. CREATE TABLE users
  2. ( id_users int usigned NOT NULL AUTO_INCREMENT PRIMARY KEY,
  3. id_rezerwacji int NOT NULL,
  4. login varchar(40) NOT NULL,
  5. password varchar(40) NOT NULL,
  6. imie varchar(40) NOT NULL,
  7. nazwisko varchar(40) NOT NULL,
  8. ulica varchar(40) NOT NULL,
  9. miejscowosc varchar(40) NOT NULL,
  10. kod_pocztowy varchar(40) NOT NULL,
  11. telefon varchar(40) NOT NULL,
  12. email varchar(40) NOT NULL
  13. );
  14.  
  15. CREATE TABLE rezerwacja
  16. ( id_rezerwacja int UNSIGNED NOT NULL AUTO_INCREMENT primary_key,
  17. id_pokoje int NOT NULL,
  18. id_users int NOT NULL,
  19. pobyt_od varchar(10) NOT NULL,
  20. pobyt_do varchar(10) NOT NULL,
  21. id_uslugi int NOT NULL,
  22. id_faktura int NOT NULL
  23. );
  24.  
  25. CREATE TABLE pokoje
  26. ( id_pokoje int UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,
  27. nrpokoju varchar(3) NOT NULL,
  28. nazwa_pokoju varchar NOT NULL,
  29. typ_pokoju varchar(20) NOT NULL,
  30. cena varchar(5) NOT NULL
  31. );
  32.  
  33. CREATE TABLE stanowisko
  34. ( id_stanowisko int UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,
  35. wynagrodzenie varchar(5) NOT NULL,
  36. premia varchar(5) NOT NULL
  37. );
  38.  
  39. CREATE TABLE faktura
  40. (id_faktura int UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,
  41. id_klienta int,
  42. id_rezerwacji int,
  43. id_uslugi int
  44. );
  45.  
  46. CREATE dodatkowe_uslugi
  47. ( id_uslugi int UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,
  48. typ_uslugi varchar(10) NOT NULL,
  49. cena varchar(5) NOT NULL
  50. );


Jednak aby możliowść składania rezerwacji działała muszą być relacje.
Proszę o podpowiedzi gdzie i jak umieścić klucz obcy, a gdzie normalny, aby to działało.
Będę wdzięczny za każdą pomoc, nawet odnośnie samej budowy baz danych.
Fifi209
A nie łaska poczytać jakiś kursów?
http://pl.wikibooks.org/wiki/PHP/Relacje_i_indeksy

P.S. InnoDB
miszarus
a budowa tych tabel co przedstawiłem??
Wiem, wiem, poczytam i coś wymyślę..... smile.gif
Co myślicie o takim powiązaniu, czy to jest dobrze:
  1. CREATE TABLE users
  2. ( id_users int usigned NOT NULL AUTO_INCREMENT PRIMARY KEY,
  3. KEY id_rezerwacji (id_rezerwacji),
  4. login varchar(40) NOT NULL,
  5. password varchar(40) NOT NULL,
  6. imie varchar(40) NOT NULL,
  7. nazwisko varchar(40) NOT NULL,
  8. ulica varchar(40) NOT NULL,
  9. miejscowosc varchar(40) NOT NULL,
  10. kod_pocztowy varchar(40) NOT NULL,
  11. telefon varchar(40) NOT NULL,
  12. email varchar(40) NOT NULL
  13. ) Engine=InnoDB;
  14.  
  15. CREATE TABLE rezerwacja
  16. ( id_rezerwacja int UNSIGNED NOT NULL AUTO_INCREMENT primary_key,
  17. KEY id_pokoje (id_pokoje),
  18. KEY id_users (id_users),
  19. pobyt_od varchar(10) NOT NULL,
  20. pobyt_do varchar(10) NOT NULL,
  21. KEY id_uslugi (id_uslugi),
  22. KEY id_faktura (id_faktura),
  23. ) Engine=InnoDB;
  24.  
  25. CREATE TABLE pokoje
  26. ( id_pokoje int UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,
  27. nrpokoju varchar(3) NOT NULL,
  28. nazwa_pokoju varchar NOT NULL,
  29. typ_pokoju varchar(20) NOT NULL,
  30. cena varchar(5) NOT NULL
  31. )Engine=InnoDB;
  32.  
  33. CREATE TABLE stanowisko
  34. ( id_stanowisko int UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,
  35. wynagrodzenie varchar(5) NOT NULL,
  36. premia varchar(5) NOT NULL
  37. )Engine=InnoDB;
  38.  
  39. CREATE TABLE faktura
  40. (id_faktura int UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,
  41. KEY id_klienta (id_klienta),
  42. KEY id_rezerwacji (id_rezerwacji),
  43. KEY id_uslugi (id_uslugi)
  44. ) Engine=InnoDB;
  45.  
  46. CREATE dodatkowe_uslugi
  47. ( id_uslugi int UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,
  48. typ_uslugi varchar(10) NOT NULL,
  49. cena varchar(5) NOT NULL
  50. ) Engine=InnoDB;
Wiochi
Według mnie:
- w tabeli users niepotrzebny jest klucz id_rezerwacji, chyba, że planujesz, że jeden user zakłada jedną rezerwację,
- w "rezerwacje" jest wąskie gardło, gdyż w tym układzie możesz mieć tylko jedną dodatkową usługę - no chyba, że taki jest plan, bo podobnie jest w "faktury",
- w "faktury" masz klucz "id_rezerwacji" a w "rezerwacje" klucz "id_faktury" - IMO trochę niepotrzebnie,
- "faktury" - klucz "id_klienta", nie wiadomo do czego się to odnosi.
miszarus
Ok, naniosę poprawki, i zobaczymy dalej........ smile.gif
  1. CREATE TABLE uslugi
  2. ( id_uslugi int UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,
  3. typ_uslugi varchar(10) NOT NULL,
  4. cena varchar(5) NOT NULL
  5. ) Engine=InnoDB;
  6.  
  7. CREATE TABLE stanowisko
  8. ( id_stanowisko int UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,
  9. wynagrodzenie varchar(5) NOT NULL,
  10. premia varchar(5) NOT NULL
  11. )Engine=InnoDB;
  12.  
  13. CREATE TABLE pokoje
  14. ( id_pokoje int UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,
  15. nrpokoju varchar(3) NOT NULL,
  16. nazwa_pokoju varchar(20) NOT NULL,
  17. typ_pokoju varchar(20) NOT NULL,
  18. cena varchar(5) NOT NULL
  19. )Engine=InnoDB;
  20.  
  21. CREATE TABLE users
  22. ( id_users int NOT NULL AUTO_INCREMENT PRIMARY KEY,
  23. id_rezerwacja int,
  24. login varchar(40) NOT NULL,
  25. password varchar(40) NOT NULL,
  26. imie varchar(40) NOT NULL,
  27. nazwisko varchar(40) NOT NULL,
  28. ulica varchar(40) NOT NULL,
  29. miejscowosc varchar(40) NOT NULL,
  30. kod_pocztowy varchar(40) NOT NULL,
  31. telefon varchar(40) NOT NULL,
  32. email varchar(40) NOT NULL
  33. ) Engine=InnoDB;
  34.  
  35.  
  36.  
  37. CREATE TABLE rezerwacja
  38. (id_rezerwacja int NOT NULL AUTO_INCREMENT PRIMARY KEY,
  39. KEY `id_pokoje` (`id_pokoje`),
  40. KEY `id_users` (`id_users`),
  41. pobyt_od varchar(10) NOT NULL,
  42. pobyt_do varchar(10) NOT NULL,
  43. id_uslugi (id_uslugi),
  44. KEY `id_faktura` (`id_faktura`)
  45. ) Engine=InnoDB;
  46.  
  47. CREATE TABLE faktura
  48. (id_faktura int UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,
  49. id_users int,
  50. id_rezerwacji int,
  51. id_uslugi int
  52. ) Engine=InnoDB
  53.  
  54.  


Brak zdefiniowanego INDEKSU!!
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.