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 msPomijam 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
--,itdOstatnio 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ń ]