optymalizacja bazy danych

0

mam około 5 obiektów, które mają około 50% danych powtarzających się.

do tej pory wszystko było w jednej tabeli. Chcę to rozbić na jedną główną tabelę
z elementami powtarzającymi sie i 5 tabeli (chldren) dziedziczące po tej głównej.

i teraz mam dylemat... używam frameworka w php i tu jest problem.

miałem użyć inherits:

http://www.postgresql.org/docs/9.1/static/ddl-inherit.html

ale jest tego problem, że jak używam dziedziczenia w bazie danych nie mogą używać relacji :/
a wolałbym zachować relacje dla spójności danych itd.

ma ktoś jakiś pomysł?

miałem zrobić tak samo rozbić 1. tabelę na jedną główną i 5 dziedziczących i łączyć je przez left join, ale problem jest z frameworkiem :/ chodzi o to, że muszę mieć 5 formularzy dla każdego oddzielnego obiektu. i w jedym formularzy łącze tabelę główna i podtabele.

i jak wysyłam formularz mają się zapisaywać dane w dwóch tabelach. nie mogę tego uzyskać
przez framework który używam.

1

Domyślam się, że chodzi Ci o to, iż masz 5 rodzajów (klas) obiektów tylko nieznacznie różniących się atrybutami (80% atrybutów wspólnych).
Czemu chcesz to rozbijać na wiele tabel? W modelu relacyjnym trudno zamodelować dziedziczenie - każde rozwiązanie to jakiś kompromis:

  1. jedna relacja:
  • najlepsza wydajność
  • brak konieczności robienia złączeń
  • najprostsze
  • brak możliwości użycia NOT NULL na atrybutach podklas
  • jak masz dużo specyficznych atrybutów, to będziesz mieć bardzo dużo NULLi w tabelce
  1. jedna relacja na klasę konkretną:
  • brak problemu z NOT NULL
  • powolne wyszukiwanie obiektu - konieczność sprawdzania we wszystkich tabelkach
  • powolne wybieranie wszystkich obiektów klasy bazowej - konieczność użycia UNION
  1. jedna relacja na klasę (włączając relację dla klasy bazowej):
  • brak problemu z NOT NULL
  • jeżeli jesteśmy zainteresowani tylko atrybutami wspólnymi (klasa bazowa) - dostęp tak samo szybki jak przy jednej relacji
  • w ogólnym przypadku powolniejsze ze względu na konieczność wykonywania złączeń

BTW: tabela i relacja to w systemach relacyjnych synonimy są; można używać zamiennie. Między tabelami są związki, a nie relacje.

Przy 80% atrybutów wspólnych, raczej obstawałbym przy rozwiązaniu 1.

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