Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Struktura bazy danych
lukaszalbert
post 27.10.2014, 07:11:28
Post #1





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

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


Mam problem jak wymyślić strukturę bazy danych.

Moim założeniem jest stworzenie systemu opisów produktów w sposób elastyczny.
Założenia:
* Stworzenie formatki opisów tzn np inaczej będzie wyglądała formatka dla dezodorantów a inaczej dla szamponów. Chodzi i inne nazwy tytułów pól produktów. Po stworzeniu takiej formatki nie będę musiał za każdym razem dodawać tytułów pól od nowa. Tylko już przy dodawaniu opisu wybieram formatkę i uzupełniam dane produktu.
* Formatka z nazwami pól do opisów ma mieć te pola stworzone w grupach, tzn. jeśli mam już jakąś grupę to w jednej z nich mam kilka nazw z pól opisów do których każdy jeden odpowiada jednej zmiennej w opisie produktu. Ma to działaś tak, że w każdej chwili mogę dodać nową grupę w której mogę dodać ww. I bez kolizji i ingerencji w bazie robić wszystko z panelu.
* nieskończona ilość grup, nazw pól grup i przypisanych do nich zmiennych produktów (i każdy produkt będzie miał inną ilość danych - jeden będzie 50 zmiennych w 8 grupach a inny tylko 2 zmienne w jednej grupie)

Ja myślałem nad czymś takim:

1. Tworzymy po jednej tabeli z kategoriami, grupami, nazwami pól, nazwami produktów i zmiennymi produktów
2. Najpierw tworzę kategorię
3. Następnie tworzę Grupy produktowe w danej kategorii
4. Następnie mogę tworzyć nazwy pól do opisów przypisując je do konkretnej grupy
5. Następnie dodaję nazwę produktu i jego nr katalogowy
5. Następne dodaję zmienne produktu wybierając kategorię i w formularzu ma mi się wyświetlić np. jeden akapit w nazwą grupy i pod nią przypisane do niej nazwy pól i w każdym kolejnym akapicie to samo by się powielało.


Teraz jakś stworzyć strukturę bazy aby móc łatwo dodać "W KAŻDYM MOMENCIE" nową grupę, produkt lub zmienną bez kolizji z wcześniejszymi danymi i aby w końcowym wyświetleniu produktu te dany były posortowane w grupach coś na wzór.

Kod
[u][b]kategoria produktu

Nazwa produktu:

Opis produktu:[/b][/u]
Grupa 1
    Nazwa pola produktu 1
        zmienna produktu 1
        zmienna produktu 5
    Nazwa pola produktu 4
        zmienna produktu 8
        zmienna produktu 55
Grupa 15
    Nazwa pola produktu 157
        zmienna produktu 65
        zmienna produktu 78
    Nazwa pola produktu 527
        zmienna produktu 36
        zmienna produktu 2


Robię to czysto amatorsko bo jestem samoukiem więc proszę o podejście jak do amatora biggrin.gif

Odswiezam temat, nikt nie ma pomysłu dobrego?
Go to the top of the page
+Quote Post
aniolekx
post 27.10.2014, 08:16:49
Post #2





Grupa: Zarejestrowani
Postów: 340
Pomógł: 46
Dołączył: 31.07.2009
Skąd: A

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


wrzuć tutaj definicje tabel, to pociągniemy dyskusje, potrafisz to opisać za pomocą MySQL?
Go to the top of the page
+Quote Post
lukaszalbert
post 27.10.2014, 09:34:41
Post #3





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

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


Masz na myśli coś takiego? Wygenerowałem z phpmyadmin

Kod
CREATE TABLE IF NOT EXISTS `kategorie` (
  `id` int(11) NOT NULL auto_increment,
  `rodzic_id` int(11) NOT NULL,
  `nazwa` text NOT NULL,
  PRIMARY KEY  (`id`)
) ENGINE=MyISAM  DEFAULT CHARSET=latin2 AUTO_INCREMENT=58;


reszty jeszcze nie mam jeśli o to chodzi.
Go to the top of the page
+Quote Post
aniolekx
post 31.10.2014, 08:59:01
Post #4





Grupa: Zarejestrowani
Postów: 340
Pomógł: 46
Dołączył: 31.07.2009
Skąd: A

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


wygenerowałem to na szybko za pomocą RedBean'a (SQLLite, nie sprawedzalem pod MySQL, ENGINE=InnoDB )
- trzeba poprawić typy kolumn
- trochę sieczka wyszła, mało czytelne wink.gif

  1. CREATE TABLE `product` (
  2. id INTEGER PRIMARY KEY AUTOINCREMENT ,
  3. `name` TEXT
  4. )
  5. ENGINE=InnoDB;
  6.  
  7. CREATE TABLE `field` (
  8. id INTEGER PRIMARY KEY AUTOINCREMENT ,
  9. `name` TEXT
  10. )
  11. ENGINE=InnoDB;
  12.  
  13. CREATE TABLE `field_product` (
  14. `product_id` INTEGER,
  15. `field_id` INTEGER ,
  16. `value` INTEGER,
  17. PRIMARY KEY (`product_id`, `field_id`),
  18. FOREIGN KEY(`field_id`) REFERENCES `field`(`id`) ON DELETE CASCADE ON UPDATE CASCADE,
  19. FOREIGN KEY(`product_id`) REFERENCES `product`(`id`) ON DELETE CASCADE ON UPDATE CASCADE
  20. )
  21. ENGINE=InnoDB;
  22.  
  23.  
  24. CREATE TABLE `category` (
  25. id INTEGER PRIMARY KEY AUTOINCREMENT ,
  26. `name` TEXT
  27. )
  28. ENGINE=InnoDB;
  29.  
  30. CREATE TABLE `field_group` (
  31. `field_id` INTEGER,
  32. `group_id` INTEGER ,
  33. PRIMARY KEY (`field_id`, `group_id`),
  34. FOREIGN KEY(`group_id`) REFERENCES `group`(`id`) ON DELETE CASCADE ON UPDATE CASCADE,
  35. FOREIGN KEY(`field_id`) REFERENCES `field`(`id`) ON DELETE CASCADE ON UPDATE CASCADE
  36. )
  37. ENGINE=InnoDB;
  38.  
  39. CREATE TABLE `group` (
  40. `id` INTEGER PRIMARY KEY AUTOINCREMENT ,
  41. `name` TEXT,
  42. `category_id` INTEGER ,
  43. FOREIGN KEY(`category_id`) REFERENCES `category`(`id`) ON UPDATE CASCADE
  44. )
  45. ENGINE=InnoDB;
  46.  
  47.  
  48. CREATE TABLE `group_product` (
  49. `product_id` INTEGER,
  50. `group_id` INTEGER ,
  51. PRIMARY KEY (`product_id`, `group_id`),
  52. FOREIGN KEY(`group_id`) REFERENCES `group`(`id`) ON DELETE CASCADE ON UPDATE CASCADE,
  53. FOREIGN KEY(`product_id`) REFERENCES `product`(`id`) ON DELETE CASCADE ON UPDATE CASCADE
  54. )
  55. ENGINE=InnoDB;
  56.  


Wprowadziłem jednak pewne modyfikacje, możliwe ze brakuje gdzieniegdzie indeksów

Ten post edytował aniolekx 31.10.2014, 09:21:02
Go to the top of the page
+Quote Post

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

 



RSS Wersja Lo-Fi Aktualny czas: 14.07.2025 - 09:55