Temat: Poważny problem - kolumny i konkretne okna = współpraca
Ostatnio edytowany przez tomboy (2009-02-04 20:38:20)
PostgreSQL to najbardziej zaawansowany system relacyjnych baz danych Open Source.
Nie jesteś zalogowany. Proszę się zalogować lub zarejestrować.
Forum PostgreSQL » PostgreSQL dla początkujących » Poważny problem - kolumny i konkretne okna = współpraca
Strony 1
Zaloguj się lub zarejestruj by napisać odpowiedź
Ostatnio edytowany przez tomboy (2009-02-04 20:38:20)
A to zalezy do tego co chcesz potem robic z ta 'tabela' z kolumnami 'przedmiot1',...
Potrzebuje dodać je do osobej tabelki jako klucz obcy.
INSERT INTO oceny (id_student,id_nazwa_przedmiotu,ocena) VALUES ('5','1',,'',);
Chciałbym aby było tego rodzaju wynik:
INSERT INTO oceny ( id_student,nazwa_przedmiotu1,nazwa_przedmiotu2,nazwa_przedmiotu3,nazwa_przedmiotu4) VALUES ('1(serial)','1','2,',3','4','5');
Żeby wartości "nazwa_przedmiotu" były kolumnami, dla wartości przedmiotów tj: "matematyka, fizyka itd"
np:
Studenci | Fizyka | Matematyka | itd
----------------------------------------------------
Marian | 2 | 3 | 2
ITD...
Cyfry będą ocenami, później jeszcze żeby było można wykonywać na nich filtracje, jakieś operacje. Musze do tego tworzyć nową tablekę, czy moge wykorzystać wartości w kolumnach? Nazwy będą identyczne co w tych kolumnach, ale kolumnami nie są, niestety, dlatego się pytam
Wybacz ale troche to bez sensu. Ilosc przedmiotow moze sie zmieniac (nie mozesz zalozyc ze nie) i co wtedy reorganizujesz tabele dodajac wiersz.
Po to uzywasz postgresa, relacyjnej bazy danych aby móc korzystac z tabelek.
To co chcesz osiagasz za pomoca trzech tabel
student(idS, imie, nazwisko)
przedmiot(idP, nazwa_przedmiotu)
oceny(idS,idP)
Zdecydowanie lepsze rozwiazanie niz twoje.
Odpowiadajac na pytanie czy sie da, pewnie tak ale przy pomocy fukcji wlasnorecznie napisanej.
Hehe
Jakby normalnie nie istniało pojęcie normalizacji
Masz racje, że oceny jak i ucznowie i wszystko inne może się zmieniać, ale ta baza ma być statyczna.
Nie wspomniałem, że mam jeszcze tabelke ze studentami, osobną. Mam taki pomysł, żeby zrobić z tej kolumny imie_nazwisko w tabelce studenci klucz obcy dlatabelki, którą podałeś jako "oceny", wtedy pobierałbym jedynie tą kolumnę(studentów) i wynik byłby taki, że pobierałbym jedną kolumne do tableki "oceny". Tabele z przedmiotami również mam osobną na potrzeby nauczycieli (kto, co prowadzi). Pomyślałem sobie, że wykorzystam te dwie kolumny. Doszłaby jedynie kolumna "ocena".
| OCENY |
--------------------------------------------------
imie_nazwisko | przedmiot | Ocena
--------------------------------------------------
mietek | |
robert
itd
I mam problem. Nie wiem jak to ugryść, bo jeden uczeń może chodzisz na wszystkie przedmiotu. Tabelka byłaby ogromiasta uczeń *(razy) przedmiot = 28 możliwości.
Jestem w kropce
rski napisal ci solution jak sie patrzy
,-[19:58:46]merlin@[local]:5432=
`-merlin>create table student (id serial primary key, imienazwisko varchar(30));
NOTICE: CREATE TABLE will create implicit sequence "student_id_seq" for serial column "student.id"
NOTICE: CREATE TABLE / PRIMARY KEY will create implicit index "student_pkey" for table "student"
CREATE TABLE
Time: 75,232 ms
,-[19:58:55]merlin@[local]:5432=
`-merlin>create table przedmioty(id serial, przedmiot varchar(16));
NOTICE: CREATE TABLE will create implicit sequence "przedmioty_id_seq" for serial column "przedmioty.id"
CREATE TABLE
Time: 3,948 ms
,-[19:59:15]merlin@[local]:5432=
`-merlin>create table oceny(id_studenta int, id_przedmiotu int, ocena numeric(4,2));
CREATE TABLE
Time: 4,204 ms
,-[19:59:52]merlin@[local]:5432=
`-merlin>insert into student(imienazwisko) values('ja'),('ty'),('inni'),('cizli');
INSERT 0 4
Time: 362,522 ms
,-[20:00:36]merlin@[local]:5432=
`-merlin>insert into przedmioty(przedmiot) values('sieci'),('analiza'),('fiza'),('matma');
INSERT 0 4
Time: 1,396 ms
,-[20:01:15]merlin@[local]:5432=
`-merlin>insert into oceny values(1,1,2.0);
INSERT 0 1
Time: 1,191 ms
,-[20:01:44]merlin@[local]:5432=
`-merlin>insert into oceny values(1,2,4.0);
INSERT 0 1
Time: 0,870 ms
,-[20:01:48]merlin@[local]:5432=
`-merlin>insert into oceny values(3,4,6.0);
INSERT 0 1
Time: 0,951 ms
,-[20:01:58]merlin@[local]:5432=
`-merlin>select s.imienazwisko as student, p.przedmiot, c.ocena from student s, oceny c, przedmioty p where s.id=c.id_studenta and c.id_przedmiotu=p.id;
student | przedmiot | ocena
---------+-----------+-------
ja | sieci | 2.00
ja | analiza | 4.00
inni | matma | 6.00
(3 rows)
Time: 1,250 ms
Pomijam fakt FK, Unique itp ;]
I troche nie wiem po co kobinowac ...
Po co sobie zycie utrudniac
Nie bardzo rozumiem zapis:
values('ja'),('ty'),('inni'),('cizli')
Myślałem, że można jedynie zapisać w sposób:
values('ja','ty','inni','cizli')
A, ty zrobiłeś z tego cztery otwarte i zamknięte zawiasy. Co to zmienia, jeżeli zapisze to tak jak podałeś?
I
p.przedmiot(i inne tego typu) - nie widze tam takiej nazwy tabelki, albo wiersza, z kropką. Ten zapis znam, ale jako warunek, gdzie "p" jest nazwą tabelki, a "przedmiot" nazwą kolumny. Pojedyncze literki przed kropką.
Albo:
student s (samopas sobie chodzi "s")
(wiem co to "as" - analogia do aliasu, dlatego nie pytam)
P.S Dziękuje za zainteresowanie.
Ostatnio edytowany przez tomboy (2009-02-06 22:12:03)
values('ja'),('ty'),('inni'),('cizli') - to robi insert z 4 rekordami
Myślałem, że można jedynie zapisać w sposób:
values('ja','ty','inni','cizli') - a to robi insert z 1 rekordem do 4 kolumn
a to
p.przedmiot(i inne tego typu) - nie widze tam takiej nazwy tabelki, albo wiersza, z kropką. Ten zapis znam, ale jako warunek, gdzie "p" jest nazwą tabelki, a "przedmiot" nazwą kolumny. Pojedyncze literki przed kropką.
to jeden z wielu sposobów na łączenie tabelek.
SELECT s.kolumna1
,s.kolumna2
FROM tabela1 s
,tabela2 y
WHERE s.id=y.id
--,itd
Ostatnio edytowany przez psocha (2009-02-07 10:13:25)
Posty [ 11 ]
Strony 1
Zaloguj się lub zarejestruj by napisać odpowiedź
[ Wygenerowano w 0.009 sekund, wykonano 10 zapytań ]