Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Struktura bazy danych
Forum PHP.pl > Forum > Bazy danych
lukaszalbert
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?
aniolekx
wrzuć tutaj definicje tabel, to pociągniemy dyskusje, potrafisz to opisać za pomocą MySQL?
lukaszalbert
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.
aniolekx
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
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.