# FIAE Abschlussprüfung 2020/21 [Prüfung als PDF](https://ccs.jade-hs.de/f/233956036) (nur intern) :::spoiler Inhaltsverzeichnis [toc] ::: Inhalt in GA 1 1. UML Aktivitätsdiagramm entwickeln 2. Algorithmen für Barcode erstellen 3. UML Klassendiagramm erstellen 4. ERD für Weine erstellen 5. SQL formulieren ## GA1 1. Handlungsschritt [Alternative Quelle](https://www.fachinformatiker.de/topic/177785-uml-aktivit%C3%A4tsdiagramm-aufgabe/): ```plantuml @startuml |Kunde| start repeat :Artikel ansehen; if () then (ausgesucht) :Artikel in den Warenkorb legen; else (nicht ausgewählt) endif repeat while () is (weiter) not (fertig) if () then (abbruch) :Vorgang abbrechen; else (einkaufen abschließen) :zur Kasse gehen; if () then (als Gast bestellen) :Adresse eingeben; else (registrierter Kunde) :Einloggen; endif :Zahlungsart eingeben; |Onlineshop| :Kaufauftrag erteilen; :Bestellung bestätigen; fork :Rechnung erstellen; fork again :Ware packen; end fork :Ware versenden; endif |Kunde| stop ``` ## GA1 2. Handlungsschritt Aufgabe: Prüfziffer ermitteln ```code= ermittlePrüfziffer(Integer[]): Integer { sum_gewichtet = 0; for (i = 0; i < length(Integer[]) - 1; i++) { if (i mod 2) { sum_gewichtet+= Integer[i] * 1; } else { sum_gewichtet+= Integer[i] * 3; } } return sum_gewichtet mod 10; } zu testen: pruefziffer = Integer[9]; pruefziffer == ermittlePrüfziffer(Integer[]) ? true : false ``` ## GA1 3. Handlungsschritt ## GA1 4. Handlungsschritt [Alternative Quelle](http://marcohensel.de/ihk/Normalisierung.html): <!--![ERD Wingut](https://i.imgur.com/0VzJldr.png) --> Es liegen folgende Informationen aus dem Pflichtenheft vor: - Für einen Wein werden Name, Jahrgang, Beschreibung und Preis gespeichert. - Jeder Wein kann nur von genau einem Weingut bestellt werden. - Ein Wein kann aus einer oder mehreren Rebsorten bestehen. Ebenso kann eine Rebsorte zur Herstellung verschiedener Weine verwendet werden. - Ein Weingut ist einer Region und eine Region ist einem Land zugeordnet. - Für jedes Weingut, Region und Land wird ein Name erfasst. - Für jede Region wird zusätzlich ein Beschreibungsfeld angelegt. - Jeder Wein ist von einem Typ (Rotwein, Weißwein,...) und einer Art (lieblich, trocken,...). Erstellen Sie für Typ und Art jeweils eigene Tabellen. Erstellen Sie ein relationales Datenbankmodell für Weine in der dritten Normalform inklusive aller Beziehungen mit Kardinalitäten. Kennzeichnen Sie Primärschlüssel mit (PK) und Fremdschlüssel mit (FK). [DB-Modell](/tCdWbPrSSg6YBgIZRHsbzw) ```plantuml ' Umsetzung plantuml: RM CC0 left to right direction hide circle entity Wein { Wein_id (PK) -- Name Jahrgang Beschreibung Preis: Weingut_id (FK) Weintyp_id (FK) Weinart_id (FK) } entity WeinRebsorte { Rebsorte_id (FK) Wein_id (FK) } entity Rebsorte { Rebsorte_id (PK) -- Name } entity Weingut { Weingut_id (PK) Region_id (FK) -- Name } entity Region { Region_id (PK) Land_id(FK) -- Name Beschreibung } entity Land { Land_id (PK) -- Name } entity Weinart { Weinart_id (PK) -- Name } entity Weintyp { Weintyp_id (PK) -- Name } ' Für einen Wein werden Name, Jahrgang, Beschreibung und Preis gespeichert. ' Jeder Wein kann nur von genau einem Weingut bestellt werden. Weingut "1" -- "n" Wein ' Ein Wein kann aus einer oder mehreren Rebsorten bestehen. Ebenso kann eine Rebsorte zur Herstellung verschiedener Weine verwendet werden. ' Wein "n" -- "m" Rebsorte aufgelöst in: Wein "1" -- "n" WeinRebsorte Rebsorte "1" -- "n" WeinRebsorte ' Ein Weingut ist einer Region und eine Region ist einem Land zugeordnet. Land "1" -- "n" Region Region "1" -- "n" Weingut ' Jeder Wein ist von einem Typ (Rotwein, Weißwein,...) und einer Art (lieblich, trocken,...). Erstellen Sie für Typ und Art jeweils eigene Tabellen. Weintyp "1" -- "n" Wein Weinart "1" -- "n" Wein ``` :::spoiler ```sql= --Abschlussprüfung Winter 2020/2021 --GA1 4. Handlungsschritt (Wein/Weingut) DROP DATABASE IF EXISTS Weingut; CREATE DATABASE Weingut; USE Weingut; CREATE TABLE Weingut ( ID int PRIMARY KEY, Name VARCHAR(64) ); CREATE TABLE Region ( ID int PRIMARY KEY, Name VARCHAR (64), Weingut_ID int, FOREIGN KEY (Weingut_ID) REFERENCES Weingut (ID), Beschreibung VARCHAR(256) ); CREATE TABLE Land ( ID int PRIMARY KEY, Region_ID int, Name VARCHAR (64), FOREIGN KEY (Region_ID) REFERENCES Region (ID) ); CREATE TABLE Typ ( ID int PRIMARY KEY , Name VARCHAR(64) ); CREATE TABLE Art ( ID int PRIMARY KEY, Name VARCHAR(64) ); CREATE TABLE Rebsorte ( ID int PRIMARY KEY, Name VARCHAR(64) ); CREATE TABLE Wein ( ID int PRIMARY KEY, Name VARCHAR(64), Jahrgang int, Beschreibung VARCHAR(256), Preis double, Typ_ID int, FOREIGN KEY (Typ_ID) REFERENCES Typ (ID), Art_ID int, FOREIGN KEY (Art_ID) REFERENCES Art (ID), Weingut_ID int, FOREIGN KEY (Weingut_ID) REFERENCES Weingut(ID) ); CREATE TABLE WeinRebsorte ( ID int PRIMARY KEY, Wein_ID int, FOREIGN KEY (Wein_ID) REFERENCES Wein (ID), Rebsorte_ID int, FOREIGN KEY (Rebsorte_ID) REFERENCES Rebsorte (ID) ); ``` ```sql= --Tabellen werden gefüllt INSERT INTO Weingut (ID,Name) VALUES (0,"Weingut Rohde"), (1,"Weingut Helmes"), (2,"Weingut Bode"), (3,"Weingut Schröder"); INSERT INTO Region (ID,Name, Beschreibung) VALUES (0,"Region Pappel","Eine Pappel Beschreibung"), (1,"Region Raste ","Eine Raste Beschreibung"), (2,"Region Frodo ","Eine Frodo Beschreibung"), (3,"Region Schima","Eine Schima Beschreibung"); INSERT INTO Land (Region_ID,Name) VALUES (1,"Land PappelRaste"), (2,"Land PappelRaste"), (3,"Land FrodoSchima"), (4,"Land FrodoSchima"); INSERT INTO Typ (ID, Name) VALUES (0,"Rotweine"), (1,"Weißweine"), (2,"Schaumweine"), (3,"Dessertweine"); INSERT INTO Art (ID, Name) VALUES (0,"Trocken"), (1,"Habltrocken"), (2,"Lieblich"); INSERT INTO Wein (ID, Name, Jahrgang, Beschreibung, Preis, Typ_ID, Art_ID, Weingut_ID) VALUES (0,"Moujobles Invecchiato",2018,"Ein RandomWein",25.0,1,2,1), (1,"Blombes Demi-Sec",2019,"Ein RandomerWein",25.0,2,1,2), (2,"Franheblage Abboccato",2018,"Ein RandomererWein",18.0,3,2,3), (3,"Focchus Cap Classique",2018,"Ein RandomerererWein",30,0,2,0); INSERT INTO Rebsorte (ID,Name) VALUES (0,"Tempranillo"), (1,"Syrah"), (2,"Merlot"), (3,"PiNOT Gris"); INSERT INTO WeinRebsorte (ID, Wein_ID, Rebsorte_ID) VALUES (0,0,2), (1,1,3), (2,2,0), (3,3,1), (4,0,2), (5,0,3), (6,1,1); ``` ::: ## GA1 5. Handlungsschritt ## GA2 1. Handlungsschritt ## GA2 2. Handlungsschritt ## GA2 3. Handlungsschritt ## GA2 4. Handlungsschritt ## GA2 5. Handlungsschritt ## 3 WiSo