Tworzenie nowych tabel pod kolor produktow.

0

Pracuje obecnie nad projektem e-commerce. Zalozmy, ze musze stworzyc tabele, ktora ma przechowywac kolor produkty. Ale mamy wartosci domyslne na poziomie firmy i/lub poziomie kategorii. Np firma=czerwony, kategoria1=zielony.Teraz tworzne produkt o kategoria1 czyli kolor zielony. Pozniej tworze produkt z kategoria2 (nie ma wartosci domyslnej) czyli kolor czerwony.

Nastepnie, wartosci domyslne tez moga zostac zmienione. Wiec zmieniamy kolor firmy z czerwonego na rozowy. Oczywiscie dwa wczesniej utworzony produkty musza utrzymac swoje kolory. Wartosci domyslne sa aplikowane wylacznie do nowch produkty, ew kolor mozna zminic z wartosci domyslna na jaka sie chce z poziomy produktu.

Jakis pomysl jak utowrzyc do tego tabele? Na razie mam cos takiego. Problem jest tego typu, ze mam 2-3 podejscia do rozwiazania tematu. Chce utrzymac wszsytko w jak najprostszej strukturze, ale tez zeby bylo latwo dodac nowe elemety.

CREATE TYPE item_colour_types AS ENUM ('FIRMA', 'KATEGORIA', 'PRODUKT');

create table item_colour
(
    id         integer           not null primary key,
    company_id integer,
    type       item_colour_types not null,
    type_id    integer           not null,
    colour     varchar(60)       not null
);
0

Z tego co mówisz to kolor ma być per kategoria (mam na myśli ten typ wyliczeniowy) więc docelowo oddzielna tabela kategoria_kolor aby pobierać odpowiedni kolor dla kategorii w momencie insertowania do intem_colour (nawet może być trigger). W takim wypadku nawet jak użytkownik stwierdzi, że ma być inny kolor niż default to wtedy sprawdzasz czy :NEW.color is null jeśli null to pobierasz z tabeli spięcia kolor-kategoria

0

Generalnie, jak tworzymy nowa firme to juz w formularzu firmy ustawiamy domyslny kolor np czerwony dla kazdego produkty. Nastpnie mozemy utworzyc kategorie i tez ustawic domyslny kolor np zielony dla danej kategorii. Nastepnie przchodzimy do tworzenia produktow. I tutaj wszsytko zalezy od wybranej kategorii. System moze pobrac domyslna wartosc z kategorii badz firmy, ew uzytkownik moze podac swoja zupelnie nowa wartosc. Niby prosta sprawa, ale ja juz mam kilka rozwiazan w glowie.

Teraz wchodzi kilka pytan. Bo najlepiej bylo by zapisac dane domyslne, a pozniej je linkowac do produktow. Tylko, kolory domyslne moga zostac zaktualizowane. Czyli chcemy utrzymac link do domyslnych starych kolorow. A nowy kolor uzyc wylacznie w nowych produktach. Nie wiem czy dobrze to wyjasniam.

0

Napisalem dwie tabele. Wartosci domyslne jak juz produktu beda przechowywane w tej samej tabeli:

CREATE TYPE item_colour_types AS ENUM ('FIRMA', 'KATEGORIA', 'PRODUKT');

create table colours
(
    id         integer           not null primary key,
    company_id integer,
    type       item_colour_types not null,
    type_id    integer           not null,
    colour     varchar(60)       not null
);


create table item_colours
(
    colour_id integer                not null references colours,
    type_id        integer           not null,
    type           item_colour_types not null
);

Zamysl jest taki, ze w momencie tworzenia nowego produkty zostanie wyszukana wartosc (o ile istnieje) i zostanie zapisywana relacja pomiedzy produketem a kolorem. W momencie, aktualizacji domyslnych wartosci bede mial juz zapisane istniejace relacje.

1

wg mnie strasznie to skomplikowałeś. Ja widzę dwa powody przeciw Twojemu rozwiązaniu

  1. żeby odczytać kolor itema potrzebujesz dwóch dodatkowych joinów
  2. żeby zapamiętać pojedynczy kolor (opisany na max 60 znakach) potrzebujesz dodać ok. 50 bajtów nic nieznaczących danych (a pewnie jeszcze więcej bo indeksy)

Do brzegu - po Twoim opisie kolor firmy/kategorii jest jedynie podpowiedzią dla użytkownika przy dodawaniu itema i potem nie ma już pomiędzy tymi kolorami ŻADNEJ korelacji. Co więcej firma/kategoria/item mogą mieć tylko jeden kolor więc dodawanie osobnych dwóch tabel z relacją 1-1 z w sumie 8 kolumnami tylko po to aby trzymać JEDNĄ wartość jest bez sensu. Ja bym te kolory po prostu zapisywał w tabeli z firmą, kategorią i itemem. Jedyna zmiana jaką bym zrobił to zamiast zapisywać kolor jako string dodał bym tabelę słownikową na kolory a w tych trzech tabelach trzymał ID.

0

Ja to troche uproscilem. Generalnie to bede mial dwie kolumny z mozliwoscia rozszerzenia do wiecej. Nie chce tworzyc nowych kolumn na tabelach firma, kategoria i produkt. Musialbym dodac takie same kolumny na 3ech tabelach. Do tego te 3 tabele sa juz popuchnieta maja po 50-100 kolumn. Wole to oddzielic.

1 użytkowników online, w tym zalogowanych: 0, gości: 1