Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [SQL] sprawdzenie relacji
Forum PHP.pl > Forum > Bazy danych > MySQL
piotrr989
Witam
Mam taką bazę danych:
  1. -- phpMyAdmin SQL Dump
  2. -- version 2.11.7
  3. -- <a href="http://www.phpmyadmin.net" target="_blank">http://www.phpmyadmin.net</a>
  4. --
  5. -- Host: localhost
  6. -- Czas wygenerowania: 28 Sty 2011, 02:51
  7. -- Wersja serwera: 5.0.51
  8. -- Wersja PHP: 5.2.6
  9.  
  10. SET SQL_MODE="NO_AUTO_VALUE_ON_ZERO";
  11.  
  12. --
  13. -- Baza danych: `uam`
  14. --
  15.  
  16. -- --------------------------------------------------------
  17.  
  18. --
  19. -- Struktura tabeli dla `klienci`
  20. --
  21.  
  22. CREATE TABLE IF NOT EXISTS `klienci` (
  23. `id_klienta` int(20) NOT NULL,
  24. `imie` varchar(20) character SET utf8 collate utf8_polish_ci NOT NULL,
  25. `nazwisko` varchar(20) character SET utf8 collate utf8_polish_ci NOT NULL,
  26. `PESEL` char(11) character SET utf8 collate utf8_polish_ci NOT NULL,
  27. PRIMARY KEY (`id_klienta`),
  28. UNIQUE KEY `PESEL` (`PESEL`)
  29. ) ENGINE=InnoDB DEFAULT CHARSET=latin1;
  30.  
  31. --
  32. -- Zrzut danych tabeli `klienci`
  33. --
  34.  
  35.  
  36. -- --------------------------------------------------------
  37.  
  38. --
  39. -- Struktura tabeli dla `pokoje`
  40. --
  41.  
  42. CREATE TABLE IF NOT EXISTS `pokoje` (
  43. `id_pokoju` int(20) NOT NULL,
  44. `pietro` varchar(20) character SET utf8 collate utf8_polish_ci NOT NULL,
  45. `id_typ` int(20) NOT NULL,
  46. PRIMARY KEY (`id_pokoju`),
  47. KEY `id_typ` (`id_typ`)
  48. ) ENGINE=InnoDB DEFAULT CHARSET=latin1;
  49.  
  50. --
  51. -- Zrzut danych tabeli `pokoje`
  52. --
  53.  
  54.  
  55. -- --------------------------------------------------------
  56.  
  57. --
  58. -- Struktura tabeli dla `rezerwacje`
  59. --
  60.  
  61. CREATE TABLE IF NOT EXISTS `rezerwacje` (
  62. `id_rezerwacji` int(20) NOT NULL,
  63. `id_klienta` int(20) NOT NULL,
  64. `id_pokoju` int(20) NOT NULL,
  65. `cena` float NOT NULL,
  66. `data_rezerwacji` date NOT NULL,
  67. `data_przyjazdu` date NOT NULL,
  68. `data_wyjazdu` date NOT NULL,
  69. `id_status` int(1) NOT NULL,
  70. PRIMARY KEY (`id_rezerwacji`),
  71. KEY `id_klienta` (`id_klienta`),
  72. KEY `id_pokoju` (`id_pokoju`),
  73. KEY `id_status` (`id_status`)
  74. ) ENGINE=InnoDB DEFAULT CHARSET=latin1;
  75.  
  76. --
  77. -- Zrzut danych tabeli `rezerwacje`
  78. --
  79.  
  80.  
  81. -- --------------------------------------------------------
  82.  
  83. --
  84. -- Struktura tabeli dla `status`
  85. --
  86.  
  87. CREATE TABLE IF NOT EXISTS `status` (
  88. `id_status` int(20) NOT NULL,
  89. `status` varchar(20) character SET utf8 collate utf8_polish_ci NOT NULL,
  90. PRIMARY KEY (`id_status`)
  91. ) ENGINE=InnoDB DEFAULT CHARSET=latin1;
  92.  
  93. --
  94. -- Zrzut danych tabeli `status`
  95. --
  96.  
  97.  
  98. -- --------------------------------------------------------
  99.  
  100. --
  101. -- Struktura tabeli dla `typy pokoi`
  102. --
  103.  
  104. CREATE TABLE IF NOT EXISTS `typy pokoi` (
  105. `id_typ` int(20) NOT NULL,
  106. `nazwa pokoju` varchar(20) character SET utf8 collate utf8_polish_ci NOT NULL,
  107. `ilosc osob` int(1) NOT NULL,
  108. `ilosc lozek` int(1) NOT NULL,
  109. PRIMARY KEY (`id_typ`)
  110. ) ENGINE=InnoDB DEFAULT CHARSET=latin1;
  111.  
  112. --
  113. -- Zrzut danych tabeli `typy pokoi`
  114. --
  115.  
  116.  
  117. --
  118. -- Ograniczenia dla zrzutów tabel
  119. --
  120.  
  121. --
  122. -- Ograniczenia dla tabeli `rezerwacje`
  123. --
  124. ALTER TABLE `rezerwacje`
  125. ADD CONSTRAINT `rezerwacje_ibfk_9` FOREIGN KEY (`id_status`) REFERENCES `status` (`id_status`),
  126. ADD CONSTRAINT `rezerwacje_ibfk_7` FOREIGN KEY (`id_klienta`) REFERENCES `klienci` (`id_klienta`),
  127. ADD CONSTRAINT `rezerwacje_ibfk_8` FOREIGN KEY (`id_pokoju`) REFERENCES `pokoje` (`id_pokoju`);
  128.  
  129. --
  130. -- Ograniczenia dla tabeli `typy pokoi`
  131. --
  132. ALTER TABLE `typy pokoi`
  133. ADD CONSTRAINT `typy pokoi_ibfk_1` FOREIGN KEY (`id_typ`) REFERENCES `pokoje` (`id_typ`);


tak to wygląda na zdjęciu:


Relacje zrobione w phpmyadmin
Czy są one dobrze zrobione?
nospor
Relacje ogólnie ok, za to masz braki w INTach

Zadne INT(20), INT(11).... tylko po prostu INT. Te liczby w nawiasach mają znaczenie tylko przy zerofill ktorego nie uzywasz.

Nie INT(1) a TINYINT. INT(1) nadal operuje na 4 bajtach, a TINYINT tylko na jednym. I to ci wystarczy dla liczby lozek czy osob w pokoju.
Uzywaj UNSIGNED. Zadna z liczb w twoich tabelach nie bedzie ujemna.
Dla kluczy głównych uzywaj autoincrement.
Czy typ pokoju musi byc INTem? Naprawdę będziesz mial kilka miliardów typów pokoi?
piotrr989
Ok, poprawię to, a jeszcze gdzie można by tu dołączyć CHECK? Myślałem o peselu ale tam unikalną wartość
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.