Temat: Lista pracowników pracujących nad projektem
1. Baz danych
nie używa się do wyrafinowanej prezentacji danych. Od tego jest warstwa widoku.
2. Nie wiemy, o jaki silnik bazy danych chodzi.
3. Czy to będą tylko 2 poziomy (można zakodować na sztywno), czy więcej (powinno być dynamicznie)?
Definicja tabel - składnia MS SQL Server
CREATE TABLE Pracownicy (ID INT IDENTITY(1,1), Personalia NVARCHAR(50), PRIMARY KEY(ID));
INSERT INTO Pracownicy VALUES('Piotr Abacki');
INSERT INTO Pracownicy VALUES('Anna Bebacka');
INSERT INTO Pracownicy VALUES('Zuzanna Cedacka');
INSERT INTO Pracownicy VALUES('Adam Dedacki');
CREATE TABLE Projekty (ID INT IDENTITY(1,1), Nazwa NVARCHAR(50), PRIMARY KEY(ID));
INSERT INTO Projekty VALUES('Projekt 1');
INSERT INTO Projekty VALUES('Projekt 2');
INSERT INTO Projekty VALUES('Projekt 3');
CREATE TABLE PracProj(ID INT IDENTITY(1,1), PracID INT, ProjID INT, PRIMARY KEY(ID));
INSERT INTO PracProj(ProjID, PracID) VALUES(1, 1);
INSERT INTO PracProj(ProjID, PracID) VALUES(1, 3);
INSERT INTO PracProj(ProjID, PracID) VALUES(2, 2);
INSERT INTO PracProj(ProjID, PracID) VALUES(2, 3);
INSERT INTO PracProj(ProjID, PracID) VALUES(2, 4);
INSERT INTO PracProj(ProjID, PracID) VALUES(3, 2);
INSERT INTO PracProj(ProjID, PracID) VALUES(3, 4);
Zapytanie, czysty SQL92
SELECT Nazwa AS Przypisania
FROM
(
SELECT proj.ID AS ProjID, -1 AS Ord, '- ' + proj.Nazwa AS Nazwa
FROM Projekty proj
UNION ALL
SELECT proj.ID AS ProjID, IsNull(prac.ID, 0) AS Ord, '---- ' + prac.Personalia AS Nazwa
FROM Projekty proj
LEFT JOIN PracProj pp ON proj.ID = pp.ProjID
LEFT JOIN Pracownicy prac ON prac.ID = pp.PracID
) x
ORDER BY ProjID, Ord
Wynik:
- Projekt 1
---- Piotr Abacki
---- Zuzanna Cedacka
- Projekt 2
---- Anna Bebacka
---- Zuzanna Cedacka
---- Adam Dedacki
- Projekt 3
---- Anna Bebacka
---- Adam Dedacki
PS:
Jakub K.:
W bazie danych są tabele pracownicy i projekty, w relacji wiele do wielu.
Czy wiesz, co jest
relacją w
relacyjnym modelu danych? Bo na pewno nie to, co napisałeś. Hint: "relationship" vs. "relation". Warto poznać odpowiedź na to pytanie, jeśli zamierza się profesjonalnie związać z informatyką :)
Ten post został edytowany przez Autora dnia 13.10.14 o godzinie 15:08