Tworze sobie oprogramowanie przechowujace dane klientow, faktur, pracownikow, itp. Oprogramowanie wspiera wielojezycznosc.
Opracowalem sobie tabele
create table Content
(
Language varchar(10) not null,
ContentType varchar(255) not null,
ForeignID integer,
CompanyID integer foreign key (Companies.ID),
Content text,
primary key (Language, ContentType, ForeignID, CompanyID)
)
gdzie:
- Language - wiadomo
- ContentType - rodzaj zawartosci, np. 'CancelLabel' - pasujace do wszystkich przyciskow typu Anuluj
- ForeignID - klucz obcy w kilku tabelach, wyjasnienie ponizej
- CompanyID - id firmy
- Content - tresc danej wartosci
Przykladowo wpisujac domyslne wartosci jednostek produktow dam
insert into Content (Language, ContentType, ForeignID, CompanyID, Content) values('pl', 'UnitType', 1, 15, 'gram')
czyli dla firmy o ID 15 jedna z uzywanych jednostek w jezyku polskim jest jednoska o ID = 1 i nazwie = 'gram'. Dla ulatwienia tworze sobie w bazie widok Units, gdzie ustawiam na sztywno kolumne ContentType.
ForeignID moze byc nullem dla wartosci globalnych (tresc stopki na stronie, czy tresc informacji o programie, wtedy i CompanyID jest nullem). Moze byc kluczem obcym, jezeli bierzemy pod uwage np. stanowisko pracownika o okreslonym ID - wtedy widok domyslnie laczy tresc stanowiska w konkretnym jezyku z danymi z tabeli Customers.
Takich ContentType bedzie wiele w tej tabeli: jednostki, stawki VAT, powody zwrotu towaru, klasa pochodzenia towaru, itp. Slowem tabela rozrosnie sie dosc szybko.
Pytanie brzmi: czy takie rozwiazanie ma jakies wady i czy lepiej podzielic ta tabele na kilka- byc moze nascie tabel do okreslonych celow, gdzie kolumny beda bardzo podobne.
Zmysl programisty wzdryga sie na sama mysl tworzenia wielu tabel o praktycznie identycznych wlasciwosciach, wiec to rozwiazanie jest dla mnie lepsze. Tym bardziej, ze ja ulatwiam sobie zycie tworzac procedury wstawiania/zmiany odpowiednich wartosci i widoki do ich odczytywania - teoretycznie wiec tej bazy nie dotykam. Ktos, kto chcialby odczytac strukture bazy tez moze rzucic okiem na bazy i procedury i raczej sie domysli po co ta jedna.
Czy z punktu bazy to obojetne (kolos czy wiele kopii to konkretnych celow) czy ma wplyw na wydajnosc? Bo co do drugiego to nie wydaje mi sie, ale chetnie sie upewnie :)
Licze na konkretne odpowiedzi, w razie czego sluze dalszymi wyjasnieniami :)