Oki, bicu precizniji i sa malo vise informacija.
P
Code:
CREATE DATABASE studentSErvice
GO
USE studentService
go
SET QUOTED_IDENTIFIER ON
GO
SET ANSI_PADDING ON
GO
CREATE TABLE [dbo].[Plan_i_program](
[idPlana] [int] NOT NULL,
[idSmer] [char](2) NOT NULL,
[yearOfStudy] [int] NOT NULL,
[StudijskiPlan] [nchar](10) NULL,
CONSTRAINT [PK__Curriculum] PRIMARY KEY CLUSTERED
(
[idPlana] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
GO
SET ANSI_PADDING OFF
GO
/****** Object: Table [dbo].[Plan_i_program_stavke] Script Date: 02/08/2012 12:52:34 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE [dbo].[Plan_i_program_stavke](
[idplana] [int] NOT NULL,
[IdIPlanStavke] [int] NOT NULL,
[sifPredmeta] [int] NOT NULL,
[Semester] [int] NULL,
[ESPB] [money] NULL,
CONSTRAINT [pk_idCurriculumIdItems_ci] PRIMARY KEY CLUSTERED
(
[idplana] ASC,
[IdIPlanStavke] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
GO
/****** Object: Table [dbo].[KomisijskiZapisnik] Script Date: 02/08/2012 12:52:34 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE [dbo].[KomisijskiZapisnik](
[idReport] [int] NOT NULL,
[idPlana] [int] NULL,
[Date] [date] NULL,
[sifPredmeta] [int] NOT NULL,
[idProfesor] [int] NOT NULL,
CONSTRAINT [pk_idReport_C] PRIMARY KEY CLUSTERED
(
[idReport] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
GO
/****** Object: Table [dbo].[KomisijskZapisnikStavke] Script Date: 02/08/2012 12:52:34 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
SET ANSI_PADDING ON
GO
CREATE TABLE [dbo].[KomisijskZapisnikStavke](
[idZapisnika] [int] NOT NULL,
[idZapisnikaStavke] [int] NOT NULL,
[studentIndeks] [int] NOT NULL,
[Note] [varchar](50) NULL,
[ocena] [int] NULL,
CONSTRAINT [pk_idReporti_idItemsreportis_CRD] PRIMARY KEY CLUSTERED
(
[idZapisnika] ASC,
[idZapisnikaStavke] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
GO
SET ANSI_PADDING OFF
GO
/****** Object: ForeignKey [FK_idCurriculum_crc] Script Date: 02/08/2012 12:52:34 ******/
ALTER TABLE [dbo].[KomisijskiZapisnik] WITH CHECK ADD CONSTRAINT [FK_idCurriculum_crc] FOREIGN KEY([idPlana])
REFERENCES [dbo].[Plan_i_program] ([idPlana])
GO
ALTER TABLE [dbo].[KomisijskiZapisnik] CHECK CONSTRAINT [FK_idCurriculum_crc]
GO
/****** Object: ForeignKey [FK_idCurriculum_ciiss] Script Date: 02/08/2012 12:52:34 ******/
ALTER TABLE [dbo].[KomisijskZapisnikStavke] WITH CHECK ADD CONSTRAINT [FK_idCurriculum_ciiss] FOREIGN KEY([idZapisnika])
REFERENCES [dbo].[KomisijskiZapisnik] ([idReport])
GO
ALTER TABLE [dbo].[KomisijskZapisnikStavke] CHECK CONSTRAINT [FK_idCurriculum_ciiss]
GO
/****** Object: ForeignKey [FK_idCurriculum_cic] Script Date: 02/08/2012 12:52:34 ******/
ALTER TABLE [dbo].[Plan_i_program_stavke] WITH CHECK ADD CONSTRAINT [FK_idCurriculum_cic] FOREIGN KEY([idplana])
REFERENCES [dbo].[Plan_i_program] ([idPlana])
GO
ALTER TABLE [dbo].[Plan_i_program_stavke] CHECK CONSTRAINT [FK_idCurriculum_cic]
GO
ALTER AUTHORIZATION ON DATABASE::StudentService TO nemsho
INSERT FILE
Code:
INSERT [dbo].Plan_i_program (idPlana, idSmer, yearOfStudy, StudijskiPlan) VALUES (43, N'15', 2009, N'2009/10 ')
INSERT [dbo].Plan_i_program (idPlana, idSmer, yearOfStudy, StudijskiPlan) VALUES (44, N'20', 2009, N'2009/10 ')
INSERT [dbo].Plan_i_program (idPlana, idSmer, yearOfStudy, StudijskiPlan) VALUES (45, N'29', 2009, N'2009/10 ')
INSERT [dbo].Plan_i_program (idPlana, idSmer, yearOfStudy, StudijskiPlan) VALUES (46, N'30', 2009, N'2009/10 ')
INSERT [dbo].Plan_i_program (idPlana, idSmer, yearOfStudy, StudijskiPlan) VALUES (47, N'31', 2009, N'2009/10 ')
INSERT [dbo].Plan_i_program_stavke (idplana, IdIPlanStavke, sifPredmeta, [Semester], [ESPB]) VALUES (43, 1, 520, 1, 6.0000)
INSERT [dbo].Plan_i_program_stavke (idplana, IdIPlanStavke, sifPredmeta, [Semester], [ESPB]) VALUES (43, 2, 501, 2, 8.0000)
INSERT [dbo].Plan_i_program_stavke (idplana, IdIPlanStavke, sifPredmeta, [Semester], [ESPB]) VALUES (43, 3, 506, 1, 4.0000)
INSERT [dbo].Plan_i_program_stavke (idplana, IdIPlanStavke, sifPredmeta, [Semester], [ESPB]) VALUES (43, 4, 507, 3, 5.0000)
INSERT [dbo].Plan_i_program_stavke (idplana, IdIPlanStavke, sifPredmeta, [Semester], [ESPB]) VALUES (43, 5, 521, 1, 4.0000)
INSERT [dbo].[KomisijskiZapisnik] (idZapisnika, idPlana, Date, sifPredmeta, idProfesor) VALUES (6949, 43, CAST(0x61320B00 AS Date), 507, 90)
INSERT [dbo].[KomisijskiZapisnik] (idZapisnika, idPlana, Date, sifPredmeta, idProfesor) VALUES (6974, 43, CAST(0x6D320B00 AS Date), 520, 1)
INSERT [dbo].[KomisijskiZapisnik] (idZapisnika, idPlana, Date, sifPredmeta, idProfesor) VALUES (7028, 43, CAST(0x6B320B00 AS Date), 501, 33)
INSERT [dbo].[KomisijskiZapisnik] (idZapisnika, idPlana, Date, sifPredmeta, idProfesor) VALUES (7195, 43, CAST(0x74320B00 AS Date), 506, 92)
INSERT [dbo].[KomisijskiZapisnik] (idZapisnika, idPlana, Date, sifPredmeta, idProfesor) VALUES (7429, 43, CAST(0xBA320B00 AS Date), 520, 1)
INSERT [dbo].KomisijskZapisnikStavke (idZapisnika, idZapisnikaStavke, studentIndeks, Note, ocena) VALUES (6949, 1, 1317, NULL, 7)
INSERT [dbo].KomisijskZapisnikStavke (idZapisnika, idZapisnikaStavke, studentIndeks, Note, ocena) VALUES (6974, 1, 1317, NULL, 7)
INSERT [dbo].KomisijskZapisnikStavke (idZapisnika, idZapisnikaStavke, studentIndeks, Note, ocena) VALUES (7028, 1, 1292, NULL, 8)
INSERT [dbo].KomisijskZapisnikStavke (idZapisnika, idZapisnikaStavke, studentIndeks, Note, ocena) VALUES (7195, 2, 1293, NULL, 7)
INSERT [dbo].KomisijskZapisnikStavke (idZapisnika, idZapisnikaStavke, studentIndeks, Note, ocena) VALUES (7429, 3, 1294, NULL, 8)
Meni su potrebe informacije iz sve četri tabele. Konkretnije, hoću informaciju o tome npr, koliko studenata je polozilo ispit, a kojom ocenom, u kom semestu se slusao i koliko bodova nose položeni predmeti. Međutim, posle JOIN-ovanja umesto da dobijem rezutate sa 5 redova, dobijam multiplikovane podatke. Kontam da je problem u kardinalitetu, odnoso relaciji jedan-prema-više tabele Plana_i_program u odnosu na tabele KomisijskiZapisik i Plan_i_program_stavke. Za svaki predmet (nakom spajanja tih tabela), koji se nalazi u rezultatu pod određenim brojem Plana_i_programa, se multiplikuju svi bodovi koji se nalate u stavkama, a takođe se multiplikuju i godine na kojima se taj predmet slusa. Tako na primer, predmet pod rednim 507 u result setu nosi sve moguće kombinacije bodova kao i sve moguće semestre na kojima se pojedini predmeti slušaju.
Upit kojim sa pokusao da resim problem:
Code:
SELECT KSP.idPlana, ksp.studentIndeks, ksp.sifPredmeta, ksp.ocena, pps.ESPB, pps.semester
FROM
(SELECT pl.idplana, kzt.studentIndeks, kz.sifPredmeta, kzt.ocena
FROM KomisijskiZapisnik kz
INNER JOIN KomisijskZapisnikStavke kzt ON kz.idZapisnika=kzt.idZapisnika
INNER JOIN Plan_i_program pl ON pl.idPlana=kz.idPlana) ksp
INNER JOIN Plan_i_program_stavke pps ON pps.idPlana=ksp.idplana
rezultat upita:
Code:
idPlana studentIndeks sifPredmeta ocena ESPB Semester
43 1317 507 7 6,00 1
43 1317 507 7 8,00 2
43 1317 507 7 4,00 1
43 1317 507 7 5,00 3
43 1317 507 7 4,00 1
43 1317 520 7 6,00 1
43 1317 520 7 8,00 2
43 1317 520 7 4,00 1
43 1317 520 7 5,00 3
43 1317 520 7 4,00 1
43 1292 501 8 6,00 1
43 1292 501 8 8,00 2
43 1292 501 8 4,00 1
43 1292 501 8 5,00 3
43 1292 501 8 4,00 1
43 1293 506 7 6,00 1
43 1293 506 7 8,00 2
43 1293 506 7 4,00 1
43 1293 506 7 5,00 3
43 1293 506 7 4,00 1
43 1294 520 8 6,00 1
43 1294 520 8 8,00 2
43 1294 520 8 4,00 1
43 1294 520 8 5,00 3
43 1294 520 8 4,00 1
Samo da napomenem, sve tabele nose isti broj redova, na osnovu čega se da zaključiti da da i krajnji rezultat treba da nosi 5 torki.
Primetite da se u rezultatu vidi da npr. predmet sa sifrom 507 nosi više različitih vrednosti ESPB-a. Takođe se taj predmet sluša u više semestara. to je prosto ne moguće. Nemam pojma šta da uradim da bi te stavari doveo u red. Pokusao sam i proceduru da napisem, ali ne ide.
Samo da napomenem, sve tabele nose isti broj redova, na osnovu čega se da zaključiti da da i krajnji rezultat treba da nosi 5 torki.
Iz rezultata da se primetiti da se kod jednog predmeta pojavljuje vise različitih ESPB bodova. Takođe, da se primetiti da je student slušao predmet u više semstara. To me ubija
P.S . Znam da model nije ispravan, i da bi stvari trebalo drugačije postaviti, ali vas molim da mi pomognete.
Pozzz
[Ovu poruku je menjao nemshooo dana 08.02.2012. u 14:07 GMT+1]