Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Baza SQL, Czy ktoś potrafi..
Darek342
post
Post #1





Grupa: Zarejestrowani
Postów: 6
Pomógł: 0
Dołączył: 8.02.2005

Ostrzeżenie: (10%)
X----


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... (IMG:http://forum.php.pl/style_emoticons/default/sad.gif)
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 7)
basurman
post
Post #2





Grupa: Zarejestrowani
Postów: 11
Pomógł: 0
Dołączył: 27.02.2005

Ostrzeżenie: (0%)
-----


tak z biegu to mam dwie uwagę:

1. rozważyłeś przypadek kiedy jedna książka ma kilku autorów (IMG:http://forum.php.pl/style_emoticons/default/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
Go to the top of the page
+Quote Post
Storm
post
Post #3





Grupa: Zarejestrowani
Postów: 9
Pomógł: 0
Dołączył: 21.03.2005

Ostrzeżenie: (0%)
-----


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 (IMG:http://forum.php.pl/style_emoticons/default/biggrin.gif) (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg)
Go to the top of the page
+Quote Post
Darek342
post
Post #4





Grupa: Zarejestrowani
Postów: 6
Pomógł: 0
Dołączył: 8.02.2005

Ostrzeżenie: (10%)
X----


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ę
Go to the top of the page
+Quote Post
soldat
post
Post #5





Grupa: Zarejestrowani
Postów: 47
Pomógł: 0
Dołączył: 14.03.2005
Skąd: W-wa

Ostrzeżenie: (0%)
-----


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

Ten post edytował soldat 1.04.2005, 13:20:32
Go to the top of the page
+Quote Post
FiDO
post
Post #6





Grupa: Przyjaciele php.pl
Postów: 1 717
Pomógł: 0
Dołączył: 12.06.2002
Skąd: Wolsztyn..... Studia: Zielona Góra

Ostrzeżenie: (0%)
-----


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
Go to the top of the page
+Quote Post
Darek342
post
Post #7





Grupa: Zarejestrowani
Postów: 6
Pomógł: 0
Dołączył: 8.02.2005

Ostrzeżenie: (10%)
X----


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.
Go to the top of the page
+Quote Post
basurman
post
Post #8





Grupa: Zarejestrowani
Postów: 11
Pomógł: 0
Dołączył: 27.02.2005

Ostrzeżenie: (0%)
-----


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
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 23.12.2025 - 23:36