Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Baza danych kilka pytań
Gribo
post
Post #1





Grupa: Zarejestrowani
Postów: 237
Pomógł: 17
Dołączył: 1.11.2007
Skąd: Zielona Góra

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


Witam mam taki schemat bazy danych :

  1. CREATE TABLE IF NOT EXISTS `directory` (
  2. `id_directory` int(11) NOT NULL,
  3. `url` varchar(45) DEFAULT NULL,
  4. PRIMARY KEY (`id_directory`)
  5. ) ENGINE=MyISAM DEFAULT CHARSET=utf8;
  6.  
  7. CREATE TABLE IF NOT EXISTS `project` (
  8. `id_project` int(11) NOT NULL AUTO_INCREMENT,
  9. `id_user` int(11) NOT NULL,
  10. `id_database` int(11) NOT NULL,
  11. `name` varchar(255) DEFAULT NULL,
  12. `description` text,
  13. `site_url` varchar(100) DEFAULT NULL,
  14. `site_title` varchar(100) DEFAULT NULL,
  15. `site_description` text,
  16. `site_keywords` varchar(255) DEFAULT NULL,
  17. `site_keywords_value` int(11) DEFAULT NULL,
  18. `site_email` varchar(100) DEFAULT NULL,
  19. `created_at` timestamp NULL DEFAULT CURRENT_TIMESTAMP,
  20. PRIMARY KEY (`id_project`)
  21. ) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
  22.  
  23.  
  24. CREATE TABLE IF NOT EXISTS `project_direcory` (
  25. `id_project` int(11) NOT NULL,
  26. `id_directory` int(11) NOT NULL,
  27. `status` varchar(45) DEFAULT NULL,
  28. PRIMARY KEY (`id_project`,`id_directory`)
  29. ) ENGINE=MyISAM DEFAULT CHARSET=utf8;
  30.  
  31.  



Moje pytanie brzmi : zakładając że w tabeli directory bede miał około 7 tysięcy wierszy w tabeli project_direcory będzie mega dużo powiazań zaużmy że pojawi sie tylko 100 projektów a liczba wpisów w tabeli project_direcory będzie wynosiła 7000*100 = 700 000. Jak to inaczej mozna rozwiazać (IMG:style_emoticons/default/questionmark.gif)

myślałem żeby w tabeli direcory wprowadzić np. nowe pole tekstowe status_success gdzie bym wpisywał po przecinku czy innym znaku id projektów. Ale jak po takiej polu później coś wyszukać (IMG:style_emoticons/default/questionmark.gif)

w celu zobrazowania jak wyobrażam sobie taką tabele direcory po modyfikacji :
  1. CREATE TABLE IF NOT EXISTS `directory` (
  2. `id_directory` int(11) NOT NULL,
  3. `url` varchar(45) DEFAULT NULL,
  4. `staus_success` text,
  5. `staus_error` text,
  6. PRIMARY KEY (`id_directory`)
  7. ) ENGINE=MyISAM DEFAULT CHARSET=utf8;
  8.  


i status_success wypełniał bym tak : 34,12,12,45,21,
gdzie liczy po przecinkach to id projektów;


Czy to dobry sposób na optymalizacje tej tabeli project_direcory (IMG:style_emoticons/default/questionmark.gif)
jak wyszukiwać potem id w polu status_success (IMG:style_emoticons/default/questionmark.gif) (IMG:style_emoticons/default/questionmark.gif)


Z góry dzięki za odp.
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
phpion
post
Post #2





Grupa: Moderatorzy
Postów: 6 072
Pomógł: 861
Dołączył: 10.12.2003
Skąd: Dąbrowa Górnicza




Zdecydowanie rozwiązanie 1, żadne łączenie statusów przecinkami! Zmień typ pola statusu ze znakowego na TINYINT, a nie powinno być żadnych problemów z wydajnością (a i miejsca nieco zaoszczędzisz).

Pozostaje jeszcze kwestia klucza głównego w tabeli project_direcory. Czy na pewno składa się on z tych 2 kolumn? Wg mnie nie, powinien składać się ze wszystkich 3 kolumn (włącznie ze statusem). Jednak w takiej sytuacji para 1 projekt i 1 katalog (?) mogą przyjąć tylko 1 raz dany status. Jeśli dopuszczasz możliwość wystąpienia duplikatów to nie obejdzie się bez standardowej kolumny id z AUTO_INCREMENT jako klucz główny.
Go to the top of the page
+Quote Post

Posty w temacie


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: 15.10.2025 - 20:09