Mam taki problem i może ktoś umiałby mi pomóc. Hauke powiedział abym stworzyła tabele przemioty, korepetytor, przedmioty korepetytora, korepetycje, uczen). W przedmiotach jest atrybut przedmiot i zawiera ona takie wartości jak matma, polski itd., w korepetytorze najważniejsze jest id_korepetytora(sa rownież inne atrybuty jak imie, nazwisko itd). Mam problem z tabelą przedmioty korepetytora, gdyż w niej pod id_korepetytora ma być pare przedmiotów. I mam nastepujące 3 problemy:
1) Czy można w tabeli przedmioty_korepetytora wpisać pod jedno id_korepetytora parę przedmiotów? Bo można za każdym razie przy wpisywaniu podawać i_korepetytora i przedmiot, ale po to miała być ta osobna tabela, aby moć przypisywać parę przedmiotów pod jedno id i nie wiem jak to stworzyć...
2) jak w tej tabeli przedioty_korepetytora zablokować by pod przedmiot mogłybyć tylko wartości jak w tabeli przedmioty?
3) Jak w tabeli korepetycje zablokować tak, aby jak uczeń chce się zapisać do danego korepetytora to tylko na przedmiot, którego on udziela?
Ad 1. - problem relacji typu "wiele do wielu" był poruszany na wykładzie z PSI. Można to rozwiązać stosując klasę pośrednią między korepetytorem, a prowadzonymi przez niego przedmiotami.
Mianowicie masz obiekty:
Korepetytor: ID_korepetytor(Klucz podstawowy), Nazwisko itd.
Przedmiot: ID_przedmiotu(Klucz podstawowy), Nazwa przedmiotu
Stwórz klasę obiektów - Korepetycje z atrybutami: ID_korepetycji(klucz podstawowy), ID_korepetytora, ID_przedmiotu
Klasa ta jest powiązana jednocześnie z korepetytorem oraz przedmiotami. Jeden korepetytor może nauczać wielu przedmiotów, jeden przedmiot może być nauczany przez wielu korepetytorów. Jednocześnie zachowujesz własność unikatowości konkretnych zajęć poprzez ID_korepetycji.
Ad 2
Nie wiem o co Ci dokładnie chodzi. Masz na myśli coś w rodzaju kontroli poprawności, żeby nie dało się wprowadzać niepoprawnych danych, żeby nie dało się wpisać nazwy przedmiotu np. "Dupa" ? Po co Ci coś takiego? Jak dla mnie bez sensu. Może korepetytor chce akurat tak nazwać swój przedmiot? Może naucza czegoś ambitniejszego niż J. angielski, Matematyka? Czegoś czego nie jesteśmy przewidzieć? Np. Systemy Komunkacji Gospodarczej? Powypisujesz tak wszystkie nazwy przedmiotów nauczanych na świecie?
Ad 3 - tego kompletnie nie rozumiem
Myślę, że rozjaśniłem chociaż trochę odpowiedź na pierwsze pytanie
_________________ "Tylko dwie rzeczy są nieskończone: wszechświat oraz ludzka głupota, choć nie jestem pewien co do tej pierwszej." A. Einstein
AD 2.
Nie wiem czy dobrze zrozumiałem, ale jeśli chcesz aby zmienna na pozycji "przedmiot" przyjmowała tylko wartości z danego zbioru np. {POLSKI, MATEMATYKA, FIZYKA} to możesz użyć "check" :
ALTER TABLE PRZEDMIOTY
ADD (
PRZEDMIOT VARCHAR2(10) CHECK (PRZEDMIOT IN ('POLSKI','FIZYKA','MATEMATYKA'))
)
Ad.2 ten sposob znam, ale ja chce by kontrolowało przedmioty i korepetytorów, którzy są wpisani do bazy. No nie wiem jeśli np. uczeń chce się zapisać do jakiegoś korepetytora to żeby kontrolowało, czy ten korepetytor uczy danego przedmiotu. Żeby nie wyszło, że ktoś bierze korepetytora i chce korki z angielskiego, a on uczy neimieckiego i matmy.
ad.1 Mam tabele pomocniczą typu przedmioty korepetytora:)
może wkleję to co dotąd napisałam(co nie twierdzę, że jest dobrze):
a ja mam pytanie:
o co chodzi elementami interakcyjnymi w poleceniach sql - parametyzacja poleceń sql? w sensie jakiego typu zapytania mają tu być?
i mógłby ktoś wrzucić przykładowe zapytania z rollup i cube bo zrobiłam jak jest w necie ale sqldeveloper wyrzuca błąd
http://www.cs.put.poznan....bs/plsem02b.pdf
Tutaj masz ładnie rozpisane o 'rollup' i 'cube' , ogólnie są to takie rozszerzenia 'group by' więc zamiast pisać 10 linijek gdzie na końcu będzie np. group by kraj group by region group by miasto group by dzielnica
możesz napisać "group by rollup(kraj,region,miasto,dzielnica)"
select ___ from ___ group by cube(a,b,c) zwróci ci grupowanie wg. (a,b,c) (a,b) (a,c) (b,c) (a) (b) (c) (), a jakbyś miała pisać to ręcznie za pomocą samego group by to musiałabyś napisać 8 ? poleceń
tu masz jeszcze trochę na ten temat :
http://zti.polsl.pl/szbdn...0SQL%20Info.pdf
a co do zapytań, to wrzuć swoje zapytania i odpowiedź programu , może po prostu jakąś literówkę popełniłaś, lub niedozwolony znak np. "-"
no ale jak wpisuje polecenie:
select * from student group by rollup(plec, nazwisko);
to wyskakuje mi komunikat
ORA-00979: to nie jest wyrażenie GROUP BY
00979. 00000 - "not a GROUP BY expression"
*Cause:
*Action:
Error at Line: 1 Column: 7
Ale group by działa tak, że dzieli daną tabelę na rozłączne zbiory i WYKONUJE PEWNE DZIAŁANIA NA TYCH ZBIORACH np. sum(), avg(), min(), a załóżmy, że w tabeli student znajdują się kolumny:
imie
nazwisko
plec
wtedy nasze group dzieli nam całą tabelę najpierw wg. "plec" na 2 rozłączne zbiory, a potem wg. "nazwisko" na ileśtam także rozłącznych zbiorów, ale załóżmy, że dwóch studentów ma na nazwisko Nowak(i taką samą plec !!) (np. Tomasz i Jan) wtedy ten drugi podział (wg. nazwiska) wyznacza nam zbiór { {Jan Nowak M}, {Tomasz Nowak M} } i wtedy program powinien zwrócić nam coś takiego:
Imie | Nazwisko | Plec|
| | |
----------|-------------|-------|
Jan | Nowak | M |
Tomasz | | |
----------|-------------|-------|
ale w kolumnie "imie" musi znajdować się jedna wartość !! dlatego w "group by"stosuje się działania Min() , Max(), Sum() itd. bo wtedy te działania (Max, Min itd.) działają na tą komórkę (u nas jest to "imię") i zostaje tylko jedna wartość
przykład z tamtego PDF'a:
select region, produkt, sum(kwota)
from sprzedaz
group by rollup(region, produkt)
jeśli istniałyby dwie komórki np. {Mazowsze, oleje, 200} i {Mazowsze, oleje, 400} to po zastosowaniu "group by" jeśli zamiast sum(kwota) zostawilibyśmy "kwota" to w w jednej komórce mielibyśmy dwie wartości (trzeci elemet) {Mazowsze, oleje, 200 400} a w ten sposób mamy jedną
czyli w skrócie: przy stosowaniu "group by" po select mogą być tylko:
* kolumny wymienione po "group by"
lub
* kolumny z zastosowaną funkcją Min, Max, Avg, Sum, (konkatenacja też pewnie pójdzie)
Nie moesz pisa nowych tematw Nie moesz odpowiada w tematach Nie moesz zmienia swoich postw Nie moesz usuwa swoich postw Nie moesz gosowa w ankietach Nie moesz zacza plikw na tym forum Moesz ciga zaczniki na tym forum