Programozási technológia

Hasonló dokumentumok
Témák. JDBC Adatbázisok JDBC használatának lépései Tranzakciók Adatbázis tervezés EK diagram

Adatbázisok webalkalmazásokban


CREATE TABLE student ( id int NOT NULL GENERATED ALWAYS AS IDENTITY PRIMARY KEY, name varchar(100) NOT NULL, address varchar(100) NOT NULL )

B I T M A N B I v: T M A N

Szálkezelés. Melyik az a hívás, amelynek megtörténtekor már biztosak lehetünk a deadlock kialakulásában?

Java programozási nyelv 11. rész Adatbázis-programozás

SQL ALAPOK. Bevezetés A MYSQL szintaxisa Táblák, adatok kezelésének alapjai

8. Gyakorlat SQL. DDL (Data Definition Language) adatdefiníciós nyelv utasításai:

A relációs adatbáziskezelés szabványos nyelve Két fő csoportba sorolhatók az utasításai

Adatbázis Rendszerek II. 1. SQL programozási felületek 39/1B IT MAN

Adatbázisok. 8. gyakorlat. SQL: CREATE TABLE, aktualizálás (INSERT, UPDATE, DELETE), SELECT október október 26. Adatbázisok 1 / 17

Adabáziselérés ODBC-n keresztül utasításokkal C#-ban

JDBC Adatbáziskapcsolat objektumok SQL parancsok küldése Kötegelt módosítások ResultSet Tranzakciók

Bevezetés: az SQL-be

OO PDO. Tehát PDO használatával, könnyen átállhatunk egy másik adatbáziskezelőre, anélkül hogy a kódot teljes egészében újraírnánk.

Adatbázis alapú rendszerek gyakorlat Adatbázis alapú alkalmazásfejlesztés Java, C# környezetben

Adatbázis kezelés Delphiben. SQL lekérdezések

B I T M A N B I v: T M A N

B I T M A N B I v: T M A N

Adatbázis-kezelés. Harmadik előadás

SZÁMÍTÓGÉPES ADATBÁZIS-KEZELÉS. A MySQL adatbáziskezelő PHP folytatás JDBC, ODBC

Adatbázisok* tulajdonságai

ADATBÁZIS-KEZELÉS - BEVEZETŐ - Tarcsi Ádám, ade@inf.elte.hu

Adatbázis használat I. 5. gyakorlat

Tartalomjegyzék. Tartalomjegyzék 1. Az SQL nyelv 1 Az SQL DDL alapjai 2

Eseményvezérelt alkalmazások fejlesztése II 12. előadás. Objektumrelációs adatkezelés (ADO.NET) Giachetta Roberto

Java Database Connectivity (JDBC)

SQL. 1.rész. 1.elıadás // Adatbázisok-1 elıadás // Ullman-Widom (Stanford) tananyaga alapján // Hajas Csilla (ELTE IK) 1

JavaServer Pages (JSP) (folytatás)

Az SQL*Plus használata

JAVA PROGRAMOZÁS 8.ELŐADÁS

Kapcsolat objektumok. Válasz feldolgozása Tranzakciók DAO tervezési minta

Célkitűzések Az Oracle10 g felépítésének, használatának alapszíntű megismerése

Java Programozás 10. Ea: JDBC. SQLite alapokon

Database Systems II. ZH összefoglaló

Bevezetés az SQL-be. Tankönyv: Ullman-Widom: Adatbázisrendszerek Alapvetés Második, átdolgozott kiadás, Panem, 2009

Dr. Pál László, Sapientia EMTE, Csíkszereda WEB PROGRAMOZÁS 4.ELŐADÁS. Adatbázis alapú alkalmazások készítése PHP-ben

Adatbázisok-1 előadás Előadó: dr. Hajas Csilla

Tranzakciókezelés PL/SQL-ben

Java és web programozás

JDBC Adatbáziskapcsolat objektumok SQL parancsok küldése Kötegelt módosítások ResultSet Tranzakciók DAO tervezési minta 1 / 45

SZAKDOLGOZAT. Szabó Attila

Informatikai képzés Információs rendszerek dr. Hajas Csilla (ELTE IK)

BEVEZETÉS Az objektum fogalma

Adatbázis használata PHP-ből

abkezel.java import java.awt.*; import java.awt.event.*; import javax.swing.*; import java.sql.*; public class abkezel extends JFrame {

WEBFEJLESZTÉS 2. ADATBÁZIS-KEZELÉS, OSZTÁLYOK

LOGISZTIKAI ADATBÁZIS RENDSZEREK BEVEZETÉS

ANDROID ALKALMAZÁSFEJLESZTÉS

SQL jogosultság-kezelés. Privilégiumok Grant és Revoke Grant Diagrammok

JDBC. A JDBC alkalmazása

Vizuális programozás gyakorlat

Adatbázisok. 2. gyakorlat SQL november november 12. Adatbázisok 1 / 31

Java és web programozás

SQL- Utasítások csoportosítása Definíció: DDL: - objektum létrehozás CREATE - objektum megszüntetés DROP - objektum módosítás ALTER

ADATBÁZIS-KEZELÉS FÉLÉVES FELADAT

Adatbázis Rendszerek I. 10. SQL alapok (DML esettanulmány)

SQL*Plus. Felhasználók: SYS: rendszergazda SCOTT: demonstrációs adatbázis, táblái: EMP (dolgozó), DEPT (osztály) "közönséges" felhasználók

B IT MAN 43/1 B IT MAN. Adatbázis Rendszerek II. Ellenőrző kérdések JDBC. v:

A gyakorlat során MySQL adatbázis szerver és a böngészőben futó phpmyadmin használata javasolt. A gyakorlat során a következőket fogjuk gyakorolni:

PHP-MySQL. Adatbázisok gyakorlat

Beszerzési logisztika támogatása az optimális beszállító kiválasztása révén

Adatbázisok. 8. gyakorlat. SQL: CREATE TABLE, aktualizálás (INSERT, UPDATE, DELETE) október október 22. Adatbázisok 1 / 14

BGF. 4. Mi tartozik az adatmodellek szerkezeti elemei

Előszó. Bevezetés. Java objektumok leképzése relációs adatbázisokra OJB-vel Viczián István Viczián István

Adatbázis rendszerek II. Adatbázis elérése C# kliens programból ADO.NET API-n keresztül

A Java nyelv. VI. Adatbázis-kezelés Javaban, Példaprogram Az elôzô részben láthattuk, hogy a Java ideális programozási nyelv perszisztens objektumok

A könyv tartalomjegyzéke

Adatbázis Rendszerek II. 8. Gyakorló környezet

Adatbázis Rendszerek II. 7. Oracle JDBC

JDBC - adatbáziskezelés

A WEB programozása - JSP1 dr.gál Tibor őszi félév

Gyakorlás: Hozzunk létre egy Alkalmazottak táblát AZO szám, Részleg szöveg, Munkakör szöveg és BelépésDátuma dátum típussal.

OOP és UML Áttekintés

SQL haladó. Külső összekapcsolások, Csoportosítás/Összesítés, Beszúrás/Törlés/Módosítás, Táblák létrehozása/kulcs megszorítások

MDAC - Microsoft Data Access Components

Kliens oldali SQL-API

Adatbázis-lekérdezés. Az SQL nyelv. Makány György

Adattípusok. Max. 2GByte

SZÁMÍTÓGÉPES ADATBÁZIS-KEZELÉS. A MySQL adatbáziskezelő A PHP programozási nyelv JDBC, ODBC

Adattípusok. Max. 2GByte

SQL PÉLDATÁR. készült a PTE TTK Iskolai informatika III. kurzus teljesítésére

Adatbázis-kezelés ODBC driverrel

IBM WebSphere Adapters 7. változat 5. alváltozat. IBM WebSphere Adapter for Oracle E-Business Suite felhasználói kézikönyv 7. változat 5.

Adatbázisok elmélete 9. előadás

SQL DDL-1: táblák és megszorítások

Készítette: Szabóné Nacsa Rozália

Programozás. Adatbázis-kezelés (alapok) Fodor Attila

Az indexelés újdonságai Oracle Database 12c R1 és 12c R2

Adatbázis Rendszerek II. 5. PLSQL Csomagok 16/1B IT MAN

Elemi alkalmazások fejlesztése IV.

Tábla létrehozása: CREATE TABLE alma( ID INT( 3 ) NOT NULL PRIMARY KEY, Leiras VARCHAR( 100 ) );

Táblakezelés: Open SQL Internal table. Tarcsi Ádám: Az SAP programozása 1.

Kilencedik témakör: Lazarus-Firebird. Készítette: Dr. Kotsis Domokos

SQL DDL-2 (aktív elemek) triggerek

Adatbázis. AMP! (Apache + MySql + PHP) XAMPP, LAMP, MAMP, WAMP et cetera

Adatbáziskezelés php-ben MySQL adatbáziskezelı rendszert használva

JUnit. JUnit használata. IDE támogatás. Parancssori használat. Teszt készítése. Teszt készítése

Indexek és SQL hangolás

Átírás:

Programozási technológia Adatbáziskezelés (JDBC) Dr. Szendrei Rudolf ELTE Informatikai Kar 2018.

Témák JDBC Adatbázisok JDBC használatának lépései Tranzakciók Adatbázis tervezés EK diagram

A JDBC... Java API szabvány relációs adatbázisok használatához Java SE része Felhasználása 1. Kapcsolódás egy adatbázishoz 2. Lekérdezések küldése az adatbázis felé 3. Kapott eredmények feldolgozása

Főbb komponensei A JDBC API Az adatbázishoz való hozzáférésket kezeli, SQL utasítások küldése az adatbázis felé, eredmények feldolgozása, az adatbázis módosítása. java.sql, javax.sql JDBC Driver Manager Kapcsolódás a haszálandó JDBC driver-hez

Relációs adatbázis áttekintés Az adatbázis egy adatok tárolására alkalmas rendszer, azzal a céllal, hogy az adatok könnyen lekérdezhetők és feldolgozhatók legyenek. Relációs adatbázis esetén az adatok táblákba, sorokba, oszlopokba rendezetten jelennek meg. A táblák adatai kapcsolódhatnak egymáshoz. Integritási szabályok: A táblák sorai egyediek Az adatok nem ismétlődnek, megfelelő táblában tároltak TABLE: STUDENTS Name Age Pet Pet Name ---------------------------------------------- Heather 10 Dog Rex NULL koncepció: NULL!= üres, NULL!= 0... És NULL!= NULL 5

SQL DQL (Data Query Language) SELECT First_Name, Last_Name FROM Employees WHERE Last_Name LIKE 'Tibi% and Car_Number IS NULL DML (Data Manipulation Language) INSERT INTO table (col_names...) VALUES(values...) UPDATE table SET col_name=... WHERE... DELETE FROM table WHERE... DDL (Data Definition Language) CREATE DATABASE db_name; CREATE TABLE table_name(col_name col_type, ); // DROP DATABASE, DROP TABLE, ALTER TABLE stb.. 6

ResultSet, Cursor A lekérdezés eredményeként kapott sorhalmaz a ResultSet. A ResultSet elemeit soronként érhetjük el egyesével. Ezt a Cursor segítségével tehetjük meg, amely egy iterátorként viselkedik. A JDBC API kurzora képes a ResultSeten mindkét irányba mozogni

Tranzakciók, Lockok Szükségessé válnak, amikor több felhasználó szeretne ugyanazon adatokkal dolgozni egy időben. Pl.: egy felhasználó sorokat módosít egy táblában, miközben egy másik felhasználó ugyanazt a táblát lekérdezi. Lehetséges, hogy a 2. felhasználó részben elavult adatokat kap eredményül. A tranzakciók SQL utasítosok egy csoportja, amely egy logikai egységet képez. A tranzakciók eredménye commit; vagy rollback; Table Lock: megakadályozza a tábla eldobását, ha nem commitolt trazakció tartozik a táblához. Row Lock: megakadályozza, hogy több tranzakció ugyanazt a sort módosítsa

JDBC használatának lépései 1. Adatbázis-kezelő telepítése 2. Adatbázis létrehozása 3. Adatbázis-csatoló könyvtár hozzáadása a projekthez 4. Adatbázis specifikus JDBC driver betöltése 5. Kapcsolat létrehozása az adatbázissal 6. SQL utasítás objektum létrehozása 7. SQL utasítás végrehajtása 8. Eredmények feldolgozása 9. Az SQL utasítás és a kapcsolat lezárása 9

Adatbázis-kezelő telepítése A labor gépeken a MySQL már telepítve, melyeken a hozzáféréshez a következő adatok szükségesek: Felhasználó név: tanulo Jelszó: Port: asd123 MySQL telepítése saját gépre 3306 (alapértelmezett a telepítésnél) Letöltés: https://dev.mysql.com/downloads/installer/ Tartalmazza a következőket: MySQL szerver MySQL csatolók a programozási nyelvekhez (Connector-J) (a telepítési mappa lib könyvtárában találhatók) MySQL Workbench Adatbázis létrehozása MySQL Workbenchben vagy NetBeans-ben 10

Adatbázis létrehozása NetBeans-ben Services fül Drivers jobb katt New driver Add MySQL könyvtárában: mysql-connector-java-[verzió]-bin.jar Drivers MySQL (Connector/J driver) jobb katt Connect Using Adjuk meg a szükséges adatokat (a Database-t hagyjuk üresen). Helyes beállítások esetén a Test Connection gomb lenyomása után megjelenik, hogy Connection Succeeded. A kapcsolat megjelenik, és kinyitva láthatjuk a már létező táblákat. Kattintsunk jobb gombbal rá, majd Execute Command Itt végrehajthatunk tetszőleges SQL utasításokat CREATE DATABASE [ADATBÁZISNÉV]; Parancsok futtatása: Ctrl+Shift+E 11

Adatbázis-csatoló hozzáadása a projekthez 12

Adatbázis driver betöltése try { // This loads an instance of the MySQL Driver. // The driver has to be in the classpath. Class.forName("com.mysql.jdbc.Driver"); } catch (ClassNotFoundException cnfe){ System.out.println("" + cnfe); }

Kapcsolódás adatbázishoz - DriverManager A megadott adatbázis URL felhasználásával kapcsolódik az adatbázishoz Format jdbc:[subprotocol]:[server-location]/[database-name] Pl.: jdbc:mysql://localhost:3306/sample Az adatbázis kapcsolat elkérése: DriverManager.getConnection Connection objektum szálak közötti megosztása nem ajánlott, létrehozásuk és a rajtuk végzett műveletek költségesek.

Driver betöltése és kapcsolódás Connection Pool technikával az adatbázishoz public class ConnectionFactory { private static MysqlConnectionPoolDataSource conn; private ConnectionFactory(){} public static Connection getconnection() throws ClassNotFoundException, SQLException { if (conn == null){ Class.forName("com.mysql.jdbc.Driver"); // driver betöltése conn = new MysqlConnectionPoolDataSource(); conn.setservername("localhost"); conn.setport(3306); conn.setdatabasename("sokoban"); conn.setuser("tanulo"); conn.setpassword("asd123"); } return conn.getpooledconnection().getconnection(); } } 15

Connection részletesebben java.sql.connection csomagban található Statement createstatement() throws SQLException Statementekkel adhatóak meg SQL utasítások void close() throws SQLException Connection manuális lezárása Lezárható a try-with-resources koncepcióval is void setautocommit(boolean b) throws SQLException külön tranzakció legyen-e minden utasítás void commit() throws SQLException void rollback() throws SQLException 16

SQLExceptions Az adatbázissal való munka közben fellépett hibák esetén kapjuk. Kinyerhető Információk: A hiba leírása SQL hibakód Driver implementáció specifikus hibakód amely megegyezhet az adatbázis hibakódjával Warningok SQLWarning az SQLException leszármazottja, a kevésbé kritikus hibákról informál Connection, Statement és a ResultSet objektum esetén getwarnings

Lekérdezések végrehajtása Az adatbázisban módosítást végrehajtani, vagy abból lekérdezni a következőképpen tudunk Connection segítségével létrehozunk egy utasítást Statement Statement stmt = connection.createstatement(); Általános célú, statikus SQL lekérdezések végrehajtására. Nem fogad paramétereket PreparedStatement PreparedStatement stmt = connection.preparestatement(); A Statement-ből származik Dinamikus, többször, különböző paraméterekkel futtatandó lekérdezések végrehajtására Megadhatók input paraméterek Az utasításon végrehajtjuk az SQL parancsot 18

Lekérdezések végrehajtása CallableStatement Tárolt eljárások hívására, a PreparedStatement-ből származik. Végrehajtás: boolean execute (String SQL): Ha a visszatérési érték true, elérhető a ResultSet. DDL utasítások végrehajtására int executeupdate (String SQL): Az érintett sorok számával tér vissza. INSERT, UPDATE, és DELETE utasításokhoz. ResultSet executequery (String SQL): Lekérdezések végrehajtásához.

Eredmény feldolgozása ResultSet Az lekérdezés eredményének sorait ResultSet típusú objektumban kapjuk meg. Kezdetben az iterátor az első sor előtt áll, amely a next() metódus hívással mozdul az első sorra. while (rs.next()) { } String value1 = rs.getstring(1); int value2 int value3 = rs.getint(2); = rs.getint("addr_ln1"); A ResultSet nek megfelelő getxxx() metódusa van minden java.sql.types típushoz. A sor mezőinek indexelése 1-el kezdődik! 20

ResultSet Az adatok olvasásán kívül azok manipulálásra is tartalmaz műveleteket. ResultSet típusok TYPE_FORWARD_ONLY: Nem scrollozható, a kurzor csak előre mozoghat az első elem előttől az utolsóig. TYPE_SCROLL_INSENSITIVE: Scrollozható, a kurzor előre és hátra is mozgatható, abszolút pozícióra ugorhatunk. Bejárás közben az adatokon végzett módosítások nem láthatóak. TYPE_SCROLL_SENSITIVE: Az adaton végzett változások láthatóak (amíg a result set nyitva van) Az alapértelmezett ResultSet nem update-elhető és csak előre tud lépni. 21

További hasznos JDBC ismeretek Adatbázis frissítése a lekérdezés eredményén keresztül try (Statement stmt = con.createstatement(resultset.type_scroll_sensitive, ResultSet.CONCUR_UPDATABLE)) { String query = "SELECT * FROM coffees"; ResultSet uprs = stmt.executequery(query); while (uprs.next()) { float f = uprs.getfloat("price"); uprs.updatefloat( "PRICE", f * percentage); uprs.updaterow(); } } 22

További hasznos JDBC ismeretek Adatbázis utasítások kötegelt feldolgozása A Statement objektumokhoz tartozik egy (kezdetben üres) végrehajtási lista, amelyhez az addbatch metódussal adhatunk hozzá DML utasításokat (kiüríteni a clearbatch-el lehet). Az executebatch metódus egyetlen végrehajtási egységként küldi el az utasításokat az adatbázisnak. A helyes hibakezeléshez, az auto commit-ot ki kell kapcsolni. String stmt = "INSERT INTO COFFEES VALUES(?,?)"; PreparedStatement pstmt = con.preparestatement(stmt); pstmt.setstring(1, "asd"); pstmt.setint(2, 49); pstmt.addbatch(); pstmt.executebatch(); 23

További hasznos JDBC ismeretek Insert után az automatikusan generált értékek elérésének engedélyezése PreparedStatement stmt = conn.preparestatement( getinsertsql(), Statement.RETURN_GENERATED_KEYS); try (ResultSet generatedkeys = stmt.getgeneratedkeys()) { if (generatedkeys.next()) { t.setid(generatedkeys.getint(1)); } else { throw new SQLException( "Creating entity failed, no ID obtained."); } } 24

Tranzakció példa Feladat: Kölcsönzések kezelése Egy kölcsönzéshez több kölcsönzött dolog tartozhat A dolgok megadott kezdeti példányszámban állnak rendelkezésre Probléma: két kliens ugyanazt a dolgot szeretné kölcsön venni, de csak egy példány van bent. (megszorítás: bent_levo_db 0) Táblák: Kölcsönzés(id, dátum, user) Kölcsönzés_elem(kölcsönzés_id, elem_id) Elem(elem_id, bent_levo_db) Kliens 1 1. Kikölcsönzi A dolgot sikerül 2. Kikölcsönzi B dolgot nincs elég 3. Kikölcsönzi C dolgot?? Kliens 2. 1. Kikölcsönzi B dolgot sikerül 2. Elmenti a kölcsönzés adatait Kölcsönzés lépései: 1. Új sor a kölcsönzés táblába 2. Minden elemre: 1. Kölcsönzés_elem felvétele 2. Elem bent_levo_db csökkentése 25

Megoldás Auto commit off Try { Kikölcsönzi A dolgot Kikölcsönzi B dolgot Kikölcsönzi C dolgot commit; } catch(sqlexception e) { rollback; } 26

Tranzakciós izolációs szintek 1. TRANSACTION_READ_UNCOMMITTED 2. TRANSACTION_READ_COMMITTED Prevents: Dirty Reads 3. TRANSACTION_REPEATABLE_READ Prevents: Dirty Reads, Non-Repeatable Reads 4. TRANSACTION_SERIALIZABLE Prevents: Dirty Reads, Non-Repeatable Reads, Phantom Reads 27

Tranzakció izolációs problémák Dirty Reads: Nem véglegesített adatok olvasása Pl.: nem commitált update Lehetséges, hogy a változtatás visszavonásra kerül az olvasás során Non-Repeatable Akkor történik, amikor egy (A) tranzakció beolvas egy sort, amelyet (B) tranzakció időközben módosít. (A) másodszor is kiolvassa a sort, de különböző értéket lát. Phantom Reads Az (A) tranzakció beolvas egy sorhalmazt, a (B) tranzakció beilleszt egy új sort, (A) másodszor is kiolvassa a sorokat, de különböző számú sort kap ugyanarra a lekérdezésre. 28

Adatbázis tervezés Egy jó adatbázis: Nem tartalmaz redundanciát Biztosítja az adatok épségét és pontosságát Tervezéskor a feladat az alkalmazás által használandó adatok táblákba rendezése, és kapcsolataik definiálása. Objektumelvű adatbázisoknál a relációs adatbázisra gyakran gondolunk úgy, mint amiben az osztályainkat táblaként, az objektumokat pedig az osztályhoz tartozó tábla soraiként tároljuk. Az objektumok közötti kapcsolatot kulcsokkal valósítjuk meg. 29

Egyedkapcsolat diagram Az adatbázis logikai modellje egyedkapcsolat diagrammal írható le. A diagram elemei: Entitások Attribútumok Kulcsok Kapcsolatok Egy-egy, egy-sok, sok-sok

Példa Hogyan reprezentálható: Egy tanár taníthat nulla vagy több osztályt, de egy osztályt pontosan egy tanár tanít. 1. lehetőség: Induljunk ki a tanár táblából, ahol tároljuk az adatain túl a tanított osztályokat: osztály1, osztály2,... Probléma: szükséges oszlopok száma? 2. lehetőség: Induljunk ki az osztály táblából, adjuk hozzá a tanár adatait tartalmazó oszlopokat Probléma: a tanár adatai többször szerepelnek

Egy-egy kapcsolat Egy termék adatbázisban a termékeknek lehetnek kiegészítő, opcionális adatai. A termékekkel egy táblában tárolva számos üres mezőt eredményeznének ezen adatok helyei.

Egy-sok kapcsolat Egy tanár taníthat nulla vagy több osztályt, de osztályt pontosan egy tanár tanít.

Sok-sok kapcsolat Egy megrendeléshez egy vagy több termék tartozik, egy termék több megrendelésben is szerepelhet.

EK diagram lépései Entitások azonosítása (Az alkalmazásban használt dolgok : megrendelés, termék, stb.) Kapcsolatok definiálása (Entitások közötti logikai kapcsolat) Számosság (Kapcsolatokban hány entitás vehet részt? Egy-egy, sok-egy.. Kötelező?) Elsődleges kulcsok megadása (Az adott jellemzők, amelyek egyértelműen azonosítanak egy entitást) Sok-Sok kapcsolatok átírása sok-egy kapcsolattá (Kapcsolótáblák) Attribútumok definiálása és entitáshoz rendelése (Entitások egyéb tulajdonságai, melyik entitáshoz tartozzon?)

Egyedkapcsolat diagram EA-ben Nyissuk meg a diagram varázslót Új projekt esetén a varázsló automatikusan megjelenik Meglévő projektnél a Project Browserben jobb klikk a Model-en Add Add a Model Using Wizard, vagy Gyorsbillentyű: Ctrl+Shift+M A Technology oldalon válasszuk ki a Database-t, a jobb oldalon pedig az Entity Relation Diagram-ot

Egyedkapcsolat diagram EA-ben A Toolbox segítségével adjuk hozzá a diagramhoz az entitásokat (Entity), valamint az attribútumokat (Attribute). Vegyük fel a kapcsolatokat a megfelelő entitások közé (Relationship) Definiáljuk a kapcsolat tulajdonságait (dupla katt) General fül: adjuk meg az irányt (Direction) Role fül: multiplicitás megadása (Multiplicity / Multiplicity)

A diagramhoz tartozó SQL CREATE TABLE Product ( ID INT NOT NULL PRIMARY KEY AUTO_INCREMENT, Name VARCHAR(100) NOT NULL, Description TEXT NOT NULL ); CREATE TABLE Features ( ID INT NOT NULL PRIMARY KEY AUTO_INCREMENT, Name VARCHAR(100) NOT NULL, Description TEXT NOT NULL, FK_ProductID INT NOT NULL REFERENCES Product(ID) );