Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Projekt bazy dla katalogu on-line
Forum PHP.pl > Forum > Bazy danych > MySQL
pszczółek
Witam,
mam małą prośbę, proszę o pomoc w rozwiązaniu problemu.
Robię taki mały projekcik, dokładnie katalog on-line(wprowadzanie danych, wyszukiwanie publikacji, czy autorów) magazynu który pojawia się 2 razy w roku. Jest to zbiór publikacji naukowych. Problem wyskoczył mi po tym jak poprosiłem kolegę o pomoc z pewnym prostym INSERTem. Stronę www i bazę stworzyłem, już byłem happy, nagle przy tworzeniu formularza pojawiło mi kilka wątpliwości. Chodzi o:
Występuje połączenie każdy z każdym, tj. każda publikacja może mieć wielu autorów, każdy autor może mieć wiele publikacji. Dlatego też chodzi mi o jakiś pomysł żeby mój system był tak zaprojektowany by uniknąć powtarzania się rekordów w którejś (lub w każdej tongue.gif) z tabel. Chodzi mi o zrobienie tak tego że np. w przypadku podawania kilka razy tego samego autora żeby nie został mu nadany inny identyfikator.
Początkowo wyglądało to na proste zadanie, lecz tak nie jest (dla mnie).
Kolega podpowiedział mi także że można utworzyć sztuczną tabele, ale o tym zaraz..przedstawię Wam strukturę bazy:
  1. -- Struktura tabeli dla `autorzy`
  2. --
  3.  
  4. CREATE TABLE IF NOT EXISTS `autorzy` (
  5. `id_autor` int(4) NOT NULL AUTO_INCREMENT,
  6. `imie` varchar(20) COLLATE utf8_polish_ci NOT NULL,
  7. `nazwisko` varchar(40) COLLATE utf8_polish_ci NOT NULL,
  8. `id_publikacja` int(5) NOT NULL,
  9. PRIMARY KEY (`id_autor`),
  10. UNIQUE KEY `id_publikacja` (`id_publikacja`)
  11. ) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_polish_ci AUTO_INCREMENT=4 ;
  12.  
  13. --
  14.  
  15. -- --------------------------------------------------------
  16.  
  17. --
  18. -- Struktura tabeli dla `numery`
  19. --
  20.  
  21. CREATE TABLE IF NOT EXISTS `numery` (
  22. `id_numer` int(3) NOT NULL AUTO_INCREMENT,
  23. `numer` int(3) NOT NULL,
  24. `czesc` int(2) NOT NULL,
  25. `rok` int(5) NOT NULL,
  26. `id_publikacja` int(5) NOT NULL,
  27. PRIMARY KEY (`id_numer`)
  28. ) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_polish_ci AUTO_INCREMENT=2 ;
  29.  
  30. --
  31.  
  32. -- --------------------------------------------------------
  33.  
  34. --
  35. -- Struktura tabeli dla `publikacje`
  36. --
  37.  
  38. CREATE TABLE IF NOT EXISTS `publikacje` (
  39. `id_publikacja` int(5) NOT NULL AUTO_INCREMENT,
  40. `temat` varchar(600) COLLATE utf8_polish_ci NOT NULL,
  41. `sl_kl` varchar(400) COLLATE utf8_polish_ci NOT NULL,
  42. `strona` int(3) NOT NULL,
  43. `link` varchar(300) COLLATE utf8_polish_ci NOT NULL,
  44. `id_numer` int(3) NOT NULL,
  45. `id_autor` int(4) NOT NULL,
  46. PRIMARY KEY (`id_publikacja`)
  47. ) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_polish_ci AUTO_INCREMENT=2 ;
  48. --
  49.  
  50. -- --------------------------------------------------------
  51.  
  52. --
  53. -- Struktura tabeli dla `sztuczna`
  54. --
  55.  
  56. CREATE TABLE IF NOT EXISTS `sztuczna` (
  57. `id_autor` int(4) NOT NULL,
  58. `id_publikacja` int(5) NOT NULL
  59. ) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_polish_ci;
  60.  
  61. --

Teraz tak..Kolega podpowiedział mi właśnie o tej tabeli "sztuczna" żeby w niej przechowywać tylko powiązanie identyfikatorów publikacji i autorów, będzie w jednym miejscu i będzie łatwiejsze wyszukiwanie, tylko teraz mi podpowiedzcie mi jak to zrobić.. bo jestem w kropce (przynajmniej dzisiaj, siedze nad tym już 8 h sadsmiley02.gif )
erix
Cytat
tylko teraz mi podpowiedzcie mi jak to zrobić.. bo jestem w kropce

A o relacjach Waść czytał? snitch.gif I tabela sztuczna nie powinna nazywać się sztuczna tylko adekwatnie do modelu relacyjnego. Poczytasz o nim, to będziesz wiedział, jak.

Poza tym, stosuj nazwy konkretne, a nie `sl_kl`, które nic nie mówi. I po polsku raczej nie nazywaj (nie mam na myśli kodowania znaków). 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.