Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Baza SQL
Forum PHP.pl > Forum > Bazy danych > MySQL
Darek342
jak w temacie.
chcialbym prosic o ewentualne wzmianki na temat zmian, ktore powinienem uwzglednic przy projektowaniu bazy..

Ma to byc baza biblioteki szkolnej.


  1. -- Baza danych: `biblioteka_szkolna`
  2. --
  3.  
  4. -- --------------------------------------------------------
  5.  
  6. --
  7. -- Struktura tabeli dla `autorzy`
  8. --
  9.  
  10. CREATE TABLE `autorzy` (
  11. `AutorID` int(10) UNSIGNED NOT NULL AUTO_INCREMENT,
  12. `Imie` varchar(20) NOT NULL DEFAULT '0',
  13. `Nazwisko` varchar(40) NOT NULL DEFAULT '',
  14. PRIMARY KEY (`AutorID`)
  15. ) TYPE=MyISAM AUTO_INCREMENT=6 ;
  16.  
  17.  
  18.  
  19. -- --------------------------------------------------------
  20.  
  21. --
  22. -- Struktura tabeli dla `czytelnicy`
  23. --
  24.  
  25. CREATE TABLE `czytelnicy` (
  26. `CzytelnikID` int(10) UNSIGNED NOT NULL AUTO_INCREMENT,
  27. `Imie` varchar(20) NOT NULL DEFAULT '',
  28. `Nazwisko` varchar(20) NOT NULL DEFAULT '',
  29. `Data_urodzenia` date NOT NULL DEFAULT '0000-00-00',
  30. `Miejsce_urodzenia` varchar(20) NOT NULL DEFAULT '',
  31. `Miejsce_zamieszkania` varchar(50) NOT NULL DEFAULT '',
  32. `Kod_pocztowy` varchar(6) NOT NULL DEFAULT '',
  33. `ulica` varchar(30) NOT NULL DEFAULT '',
  34. `Telefon` varchar(30) DEFAULT '',
  35. `KlasaID` int(10) UNSIGNED NOT NULL DEFAULT '0',
  36. PRIMARY KEY (`CzytelnikID`)
  37. ) TYPE=MyISAM AUTO_INCREMENT=19 ;
  38.  
  39. --
  40. -- Zrzut danych tabeli `czytelnicy`
  41. --
  42.  
  43.  
  44.  
  45. -- --------------------------------------------------------
  46.  
  47. --
  48. -- Struktura tabeli dla `gatunek`
  49. --
  50.  
  51. CREATE TABLE `gatunek` (
  52. `GatunekID` int(10) UNSIGNED NOT NULL AUTO_INCREMENT,
  53. `gatunek` varchar(50) NOT NULL DEFAULT '',
  54. PRIMARY KEY (`GatunekID`)
  55. ) TYPE=MyISAM AUTO_INCREMENT=4 ;
  56.  
  57. --
  58. -- Zrzut danych tabeli `gatunek`
  59. --
  60.  
  61.  
  62. -- --------------------------------------------------------
  63.  
  64. --
  65. -- Struktura tabeli dla `klasa`
  66. --
  67.  
  68. CREATE TABLE `klasa` (
  69. `KlasaID` int(10) UNSIGNED NOT NULL AUTO_INCREMENT,
  70. `Klasa` char(6) NOT NULL DEFAULT '',
  71. PRIMARY KEY (`KlasaID`)
  72. ) TYPE=MyISAM AUTO_INCREMENT=17 ;
  73.  
  74. --
  75. -- Zrzut danych tabeli `klasa`
  76. --
  77.  
  78.  
  79.  
  80. -- --------------------------------------------------------
  81.  
  82. --
  83. -- Struktura tabeli dla `ksiazki`
  84. --
  85.  
  86. CREATE TABLE `ksiazki` (
  87. `KsiazkiID` int(10) UNSIGNED NOT NULL AUTO_INCREMENT,
  88. `Tytul` varchar(60) NOT NULL DEFAULT '',
  89. `WydawnictwoID` int(10) UNSIGNED NOT NULL DEFAULT '0',
  90. `AutorID` int(10) UNSIGNED NOT NULL DEFAULT '0',
  91. `GatunekID` int(10) UNSIGNED NOT NULL DEFAULT '0',
  92. PRIMARY KEY (`KsiazkiID`)
  93. ) TYPE=MyISAM AUTO_INCREMENT=21 ;
  94.  
  95. --
  96. -- Zrzut danych tabeli `ksiazki`
  97. --
  98.  
  99.  
  100. -- --------------------------------------------------------
  101.  
  102. --
  103. -- Struktura tabeli dla `sygnatura`
  104. --
  105.  
  106. CREATE TABLE `sygnatura` (
  107. `Sygnatura` char(11) NOT NULL DEFAULT '',
  108. `KsiazkiID` int(11) UNSIGNED NOT NULL DEFAULT '0',
  109. PRIMARY KEY (`Sygnatura`)
  110. ) TYPE=MyISAM;
  111.  
  112. --
  113. -- Zrzut danych tabeli `sygnatura`
  114. --
  115.  
  116.  
  117.  
  118. -- --------------------------------------------------------
  119.  
  120. --
  121. -- Struktura tabeli dla `wydawnictwo`
  122. --
  123.  
  124. CREATE TABLE `wydawnictwo` (
  125. `WydawnictwoID` int(10) UNSIGNED NOT NULL AUTO_INCREMENT,
  126. `Wydawnictwo` char(20) DEFAULT NULL,
  127. PRIMARY KEY (`WydawnictwoID`)
  128. ) TYPE=MyISAM COMMENT='wydawnictwo' AUTO_INCREMENT=6 ;
  129.  
  130. --
  131. -- Zrzut danych tabeli `wydawnictwo`
  132. --
  133.  
  134.  
  135.  
  136. -- --------------------------------------------------------
  137.  
  138. --
  139. -- Struktura tabeli dla `wypozyczenia`
  140. --
  141.  
  142. CREATE TABLE `wypozyczenia` (
  143. `CzytelnikID` int(10) UNSIGNED NOT NULL DEFAULT '0',
  144. `Sygnatura` int(10) UNSIGNED NOT NULL DEFAULT '0',
  145. `Data_wypozyczenia` date DEFAULT NULL,
  146. `Data_oddania` date DEFAULT NULL,
  147. UNIQUE KEY `id_czytelnika` (`CzytelnikID`)
  148. ) TYPE=MyISAM;
  149.  
  150. --
  151. -- Zrzut danych tabeli `wypozyczenia`
  152. -- .


Bardzo proszę o pomoc... sad.gif
basurman
tak z biegu to mam dwie uwagę:

1. rozważyłeś przypadek kiedy jedna książka ma kilku autorów questionmark.gif
w Twojej bazie nie widzę rozsądnego sposobu na zapisywanie takich egzemplarzy

2. wg mnie tabela 'sygnatura' jest zbędna - masz przecież klucz 'KsiazkiID',
którego możesz użyć bezpośrednio w tabeli 'wypozyczenia'

w razie czego daj znać, kumpel właśnie kończy pisanie
podobnej bazy - o ile Ty to nie On
Storm
Ja tylko odnośnie tej sygnatury nieszczęsnej - otóż jest to identyfikacja danego woluminu w każdej bibliotece, niezależnie od tego czy przydzieli się tej książce id w bazie czy nie - ten numer będzie zawsze przydzielony przy włączaniu książki do księgozbioru.
Sam się o tym dowiedziałem dosłownie 2 dni temu podczas pisania własnej bazki płyt od studentki bibliotekoznawstwa biggrin.gif winksmiley.jpg
Darek342
Oj nie przewidziałem takiej sytuacji, kiedy książka może mieć kilku autorów. Jeżeli ktoś ma jakiś pomysł jak to zmienić w bazie bardzo proszę o poprawę.

ps. Jeżeli ktos posiada podobny projekt bazy czy moglbym go zobaczyć ?.

Z góry dziękuję
soldat
W kwestii kilku autorów : w tabeli ksiazki typ pola AutorId zmieniłbym na varchar i zapisywałbym klucze do tabeli autorów oddzielone jakims separatorem (np. |)
Przy takim podejściu do problemu, jest to jedyna potrzebna zmiana w strukturze bazy.

Później np. przy przeszukiwaniu po kątem autora (-ów), wystarczy użyć np. REGEXP, lub zwykłego LIKE.

EDIT : mnie również tabela sygnatury wydaje się calkowicie zbędna - jest to informacja, którą spokojnie można zamieścić w tabeli ksiazki, która swój klucz już ma

Pozdrawiam
FiDO
Cytat(soldat @ 2005-04-01 13:18:22)
W kwestii kilku autorów : w tabeli ksiazki typ pola AutorId zmieniłbym na varchar i zapisywałbym klucze do tabeli autorów oddzielone jakims separatorem (np. |)
Przy takim podejściu do problemu, jest to jedyna potrzebna zmiana w strukturze bazy.

Później np. przy przeszukiwaniu po kątem autora (-ów), wystarczy użyć np. REGEXP, lub zwykłego LIKE.

Bardzo glupi pomysl...

Jedynym slusznym rozwiazaniem tego problemu powinno byc zrobienie relacji wiele do wielu za pomoca dodatkowej tabeli laczacej ktora zawierala by pola id_ksiazki oraz id_autora
Darek342
Co do relacji "wiele do wielu" słuszna decyzja.

Jeżeli chodzi o sygnature to musi ona koniecznie byc w bazie biblioteki. Niestety dalej cholercia nie wiem na jakiej zasadzie ona dziala, do czego jest potrzebna, co w niej powinno byc uwzględnione.
basurman
problem autorów masz już załatwiony - wg mnie to też jedyne słuszne rozwiązanie
(a kumpel i tak zrobił po swojemu ...)

co do sygnatyry to sprawę wyjaśnił już Storm (a w poprzednim poście sam napisałem,
że jest zbędna)
działa ona podobnie jak Twoje 'KsiazkaID' tyle że jest starsza
i do niedawna identyfikowała książki tylko na papierze i identyfikuje każdy
egzemplarz a 'KsiazkaID' okresla partie ksiazek

Twoje rozwiązanie jest dobre, redukujesz do minimum liczbę rekordów
w tabeli 'ksiazki' - w bibliotece masz przeważnie sporo egzemplaży jednego wydania
danej książki i w tabeli 'ksiazki' bedzisz miał jeden rekord o takiej serii
natomiast w tabeli 'sygnatura' będziesz miał identyfikacje każdego woluminu

nie wiem czy jest to u Ciebie konieczne, ale rozważ dodanie do tabeli 'ksiazki'
kolumny z numerem ISBN
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.