konto usunięte

Temat: SQL Pytanie

Witam,

Robię to pierwszy raz dlatego może być banalnie, a więc.

Model Laptopa "x" ma możliwość posiadania w swoim wnętrzu:
od 1 do 2 procesorów ( 10 różnych modeli procesora )
od 1 do 2 dysków ( 5 różnych modeli dysków )
od 1 do 8 GB Ram ( 4 rodzaje kości o okreslonej częstotliwości )

Model Laptopa "z" ma takie same mozliwosci rozbudowy ale:

posiada inne modele procesora
inne modele dysków
inne rodzaje pamięci ram.

Potrzebuję stworzyć bazę w której będzie osobna tabela z wszystkimi istniejącymi procesorami, dyskami, pamięciami ram, etc jakie mogą być umieszczona w załóżmy 30 rodzajach laptopów od vendora np DELL.

Finalnie z bazy, dane mają byc pobierane do list rozwijanych które wzajemnie się wykluczają.

Przykładowo:
Lista1 zawiera modele laptopów
Lista2 zawiera procesory
Lista3 zawiera dyski

kiedy wybierzemy w liscie1 model x
to w liscie2 zostaną do wyboru tylko te procesory ktore posiada modelx
idąc dalej na liscie3 pozostaną jedynie dostepne dyski ktore mozna umiescic w wybranym laptopie na liscie1.

I problemem jest tutaj baza.

Muszę tam wrzucić: PROCESORY, MODELE LAPTOPÓW, DYSKI, PAMIĘCI RAM, ZASILACZE, KOLORY OBUDOWY etc.

lekko mnie to przerosło.
Macie pomysł jak zrobić taką bazę?
Proszę o jakiś przykład...

Dzięki
Jarosław Kędzierski

Jarosław Kędzierski Admin od okienek

Temat: SQL Pytanie

Sposobów na rozwiązanie tego zadania jest mnóstwo... znacząco wszystko zależy od tego jakie tam te dane będą potrzebne.

Osobiście polecałbym coś na kształt:
osobne tabele na procesory, dyski, ramy itp. albo jedna wspólna jeśli zakres informacji na to pozwala.
dodatkowa tabela z możliwymi specyfikacjami modeli, czyli zawierająca wszystkie możliwe kombinacje (model, procesor, dysk, ram), oczywiście przechowywująca tylko idki.

Stored procedurki do każdej z list rozwijalnych pobierające opcjonalne parametry będące idkami tego co już wybrano i zwracająca listę dostępną dla danego zestawu już określonych parametrów.

Raczej proste do implementacji.

konto usunięte

Temat: SQL Pytanie

Proponuję tabele:

Producent
Procesor (ProducentID)
Dysk (ProducentID)
Ram (ProducentID)
Obudowa (ProducentID)

Zestaw (zawiera ID z tabel Procesor, Dysk,RAM,Obudowa ; dodatkowo zestaw może mieć nazwę czyli model)
Adam O.

Adam O. Bazy danych etc

Temat: SQL Pytanie

Osobne tabele na każdy z rodzajów podkomponentów i wspólna tabela z zestawem mają ten minus, że jeżeli zaczną montować w lapkach nowy rodzaj komponentu, to trzeba dodać nową tabelkę, alterować tabelkę z zestawami, dorabiać nową logikę biznesową, itd. Ja wiem że nowy rodzaj komponentu w lapku nie trafia się często;) ale mimo wszystko brzydko mi to wygląda. Ja bym się zabrał do tego tak:
Komponent (KomponentID, TypKomponentu, NazwaKomponentu)
ZestawModel (KomponentID, KomponentIDNastepny)
Zestaw(ZestawID, Cena, ...)
ZestawKomponenty(ZestawID, KomponentID)

Komponent trzyma np [1, 'PROCESOR', 'iCore'], [2, 'DYSK', 'Seagate'] czyli wiadomo.
ZestawModel jest taką ładną strukturą drzewiastą, z elementem 'szczytowym' np takim [1, 2], czyli lista komponentów i tego z czym można je łączyć. Specjalnymi elementami są te typu [null, 1], czyli lista komponentów startowych (procków w tym przypadku?)
Zestaw jest po prostu IDkiem czegoś już złożonego.
ZestawKomponenty to lista komponentów wrzuconych do zestawu.
Zapytanie o pierwszy element:
select * from ZestawModel where KomponentID is null
Po wybraniu pierwszego każdy kolejny element:
select KomponentIDNastepny from ZestawModel where KomponentID in (select KomponentID from ZestawKomponenty where ZestawID = @IDSkladanegoZestawu and KomponentIDNastepny <> ZestawKomponenty.KomponentID) -- wiem, jakiś ładny join by był lepszy, lenistwo...

Jeżeli jakieś komponenty są opcjonalne, a koniecznie je chcemy też mieć w naszej strukturze drzewiastej, to trzeba to jeszcze trochę ulepszyć, ale ja tu tylko wskazuję ścieżkę, a nie rozwiązanie;) Jak się gdzieś machnąłem, to obwiniaj moje niewyspanie;)

konto usunięte

Temat: SQL Pytanie

Laptopy
(
Laptop_Id
Model
...
)
Procesory -Analogicznie dyski i RAM
(
Procesor_Id
Name
...
)

Laptopy_dyski - -Analogicznie procesory i RAM
(
Laptop_ID
Dysk_ID
)

Używając tego dodasz laptoppy oraz dowolną ilość dysków itp kompatybilnych z danym lapkiem.

Jest jeszcze jedna opcja:
Można zlecić to osobie która się na tym zna :)Sebastian O. edytował(a) ten post dnia 05.08.11 o godzinie 15:34

konto usunięte

Temat: SQL Pytanie

Dzięki za porady, mam teraz większą jasność o co w tym chodzi.
Wszystkiego można się nauczyć ale niestety wymaga to czasu którego ... brakuje.

Jak nie dam rady bo po drodzę wymyślę dodatkowe opcje to napewno zlecę komuś.
Jak sądzicie, jakie widełki finansowe należałoby założyć w tym wypadku ?

Pzdr
d

konto usunięte

Temat: SQL Pytanie

Zależy :P od bardzo wielu czynników np. czy chodzi o same stworzenie bazy,procedur, czy też napisanie aplikacji, dopisanie do istniejącej aplikacji itp.

konto usunięte

Temat: SQL Pytanie

zaczynam od zera...

należałoby stworzyć bazę danych, oraz dorobić do niej interfejs "php" ( dla użytkownika i administratora )

po stronie użytkownika oczywiście dobór produktów na podstawie list rozwijanych, po stronie administratora ( dodawanie usuwanie edycja rekordów z bazy ).

do najtrafniejszego wskazania produktu potrzebnych jest max 15 -20 zaleznych list rozwijanych.

wprowadzanie produktu i przypisywanie zależności pomiędzy komponentami, po mojej stronie.

to tak w skrócie ;)

konto usunięte

Temat: SQL Pytanie

W wielkim uproszczeniu proponuję coś takiego:

tb_laptopy: (id, model)

tb_komponenty: (id, nazwa) [np: 1,PAMIEC]
tb_cechy_komponentow : (id, cecha) [np: 1,Producent; 2,Rozmiar]
tb_wartosci_cech: (id, id_cechy, wartosc) [np: 1,1,'AMD';1,2,'3MB']

tb_konfiguracja: (id,id_laptop, id_komponent)

Wszystko masz słownikowane - dzięki temu gdy zaczniesz sprzedawać zestawy z 3 procesorami nie będziesz musiał robić alter tabeli, a poza tym będziesz mógł dołożyć łatwe wyszukiwanie zestawów pod względem konfiguracji.

To oczywiście tylko jedna z propozycji :)

Następna dyskusja:

Ma pytanie jak w MS SQL wyl...




Wyślij zaproszenie do