Induljunk ki az Oracle HR sémából!
Az
EMPLOYEES táblából szükséges adatok: alkalmazottak neve konkatenálva a
FIRST_NAME és
LAST_NAME mezőkből, illetve a meglévő elérhetőségek:
EMAIL (kiegészítve),
PHONE_NUMBER és a hozzáadott
WEBSITE. A
JOBS táblából szükséges a munkakör megnevezése a
JOB_TITLE mezőből, és a részleg neve a
DEPARTMENTS tábla
DEPARTMENT_NAME mezőből.
Építeni kell a
DEPARTMENTS és
EMPLOYEES táblák közötti 1:N kapcsolatra (azaz egy adott részlegben több alkalmazott is dolgozik), amelyet a
DEPARTMENT_ID mező valósít meg. Nem szükséges az
EMPLOYEES és
DEPARTMENTS táblák közötti 1:N kapcsolat (azaz egy adott alkalmazott vezetőként több részleget is vezethet). Szükséges a
JOBS és az
EMPLOYEES táblák közötti 1:N kapcsolat, ami a
JOB_ID mezővel valósul meg.
Hasznosak a köztes/átmeneti elnevezések a tábláknál (
D,
J,
E) és a mezőknél (például
EMPLOYEE_NAME) egyaránt. Előbbieknél a mezőnevek minősítéséhez és egyértelmű hivatkozásaihoz kellenek, utóbbinál a metaadatokba kerülnek és utólag kiolvashatók (
ResultSetMetaData) és megjelenítéstől függően tartozhatnak például egy
JTable vizuális komponens mögötti
DefaultTableModel-hez.
A
CONCAT függvénynek két paramétere lehet, ezért csak ott használtam, ahol ez kézenfekvő volt és elegendőnek bizonyult (az
EMPLOYEE_NAME-nél nem akartam egymásba ágyazni két
CONCAT-ot).
Az első lekérdezés a 107-ből 106 alkalmazott adatait adja vissza.
A második lekérdezés a hiányzó 1 alkalmazott adatai miatt szükséges, akinek nincs beállított részlege (
DEPARTMENT_ID IS NULL). Neki hiányos a
COMPANY_DEPARTMENT_NAME adata, de így is egységes lehet az eredménytáblaként kapott adathalmaz (például oszlopok sorrendje és adattípusa).
A két lekérdezés eredményét egyesíteni kell (
UNION).
A lekérdező parancs
A lekérdező utasítást bele kell építeni egy Java kliensprogramba (MVC architekturális tervezési minta szerint a modell rétegbe), ami JDBC alapon kapcsolódik az Oracle adatbázis-szerver HR sémájához olyan felhasználó nevében, aki csatlakozhat és lekérdezhet. Meg kell tervezni és felügyelni kell a biztonságos kapcsolatot (kivételkezeléssel), annak életciklusát (nyit, lekérdez, zár), valamint gondoskodni kell az eredménytábla megjelenítéséről.
A keletkező eredménytábla exportálható Excel-be (XLS, XLSX formátumokba), és kiegészíthető például még egy oszloppal/mezővel (darabszám). Ezután átadható a grafikusnak, aki például felhasználja azt adatforrásként saját névjegykártya tervező szoftverében, vagy használja a Word körlevél varázslóját. Az adatforrás sorrendje (
ORDER BY) megkönnyítheti az elkészült névjegykártyák szétosztását.
A bejegyzéshez tartozó teljes forráskódot ILIAS e-learning tananyagban tesszük elérhetővé tanfolyamaink résztvevői számára.
A feladat a Java SE szoftverfejlesztő tanfolyam 45-48. óra: Adatbázis-kezelés JDBC alapon, 1. rész alkalmához, illetve a Java adatbázis-kezelő tanfolyam 9-12. óra: Oracle HR séma elemzése, 13-16. óra: Konzolos kliensalkalmazás fejlesztése JDBC alapon, 1. rész, 33-36. óra: Grafikus kliensalkalmazás fejlesztése JDBC alapon, 2. rész alkalomhoz kapcsolódik.
Az SQL forráskód formázásához a Free Online SQL Formatter-t használtam.