Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Problem z opracowaniem odpowiedniej struktury tabel
Forum PHP.pl > Forum > Bazy danych
tornax
Witam

Przymierzam się do rozpoczecia pisania włąsnego projektu i natrafiłem na pewnien problem, który przedstawie tutaj w uproszczeniu:


Mam dwie klasy: koła i kwadraty, które chciałym zapisać w bazie

Obie klasy posiadają takie wartości jak położenie (x, y), jednak oprócz tego kwadraty mają długość boku a koła średnicę.

Często będę potrzebował znać położenia i jednych i drugich natomiast wydaje mi się bezsensowne toworzenie tabeli zawierającej przemieszane atrybuty dla kół i kwadratów, zresztą o ile się nie myle prowadzi to do stworzenia tabeli w pierwszej postaci normalnej. Poza tym krotek będzie masa.


Oczywiście jak pisałem to uproszenie, takich klas do zapisania będzie dużo więcej i będą miały całą masę innych niewspólnych atrybutów, jednak będą i takie które pozostaną wspólne.

Jednym z pomysłów jest stworzenie poprostu osobnych tabel dla każdej z klas - co jest niewygodne bo kient musi pobrać dane ze wszystkich tabel i porównywać je u siebie (wspólne atrybuty).

Inny pomysł, mojego wykładowcy, zakłada stworzenie odpowiednich powiązań między tabelami

]



Takich powiązań między tabelami (na poziomie bazy danych) które przy np. próbie wyciągnięcia wszystkich informacji o krotce o #1, zidentyfikują ją jako 'typ: 1' (koło) i przekażą w odpowiedzi odpowiednie pola z tabeli 'typ 1'
Z grubsza zakładało to wykorzystanie procedur składowanych (?) ... i tyle z całego pomysł. Chociaż przy mojej, pobieżnej, wiedzy o procedurach skłądowych jakoś ciężko mi sobie to wyobrazić.


Dlatego mam:

Pytanie zerowe, jak można to wogóle sesownie zrealizować i czy pomysł przedstawiony przed chwilą ma ręce i nogi ?

Wstępnie całosć chciałbym stworzyć w oparciu o MySQL'a dlatego pierwsze moje pytanie brzmi: jeżeli pomysł ma ręce i nogi to jak wygląda możliwość stworzenia czegoś takiego pod MySQL właśnie ?

Drugie jeżeli nie MySQL, to co innego, bardziej nadającego się ?
Zbłąkany
Jeśli idzie o MySQL to twój pomysł ma ręce i nogi, ale jeśli byś wybrał PostgreSQL to mógłbyś użyć dziedziczenia na tabelach w bazie danych, np. tworzysz tabelę klasa (ang. class), która zawiera wszystkie wspólne atrybuty dla każdej klasy i tabele dziedziczące po klasa:
  1. CREATE SEQUENCE id_class_seq MINVALUE 1 NOMAXVALUE NO CYCLE;
  2. CREATE TABLE class (
  3. id INTEGER NOT NULL UNIQUE DEFAULT NEXTVAL('id_class_seq') PRIMARY KEY,
  4. name VARCHAR(100) NOT NULL UNIQUE,
  5. x INTEGER NOT NULL,
  6. y INTEGER NOT NULL
  7. );
  8. CREATE TABLE circle (
  9. diameter INTEGER NOT NULL
  10. ) INHERITS class;

W taki sposób możesz sobie stworzyć strukturę drzewiastą na tabelach smile.gif . Mimo wszystko do czegoś takiego poleciłbym PostgreSQL tongue.gif
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.