Databaser
**Databaser** \ För den praktiska delen av kursen kommer främst MySQL Workbench användas, hittills har jag installerat det. \ **Lista av kommandon samt vad de gör:** **USE** = *Används för att markera ett visst objekt t.ex schemas eller tables.* **SELECT** = *Används för att få fram viss data ur ett en kolumn i ett table.* **FROM** = *Markera vilket table som skall hämtas* **--** = *Använd för att kommentera bort kod i query* **WHERE**(=,LIKE) = Används för att peka på data i databasen som matchar något. **GROUP BY** = Grupperar ett visst resultat. Används ofta i kombination med as. **HAVING** **INSERT INTO** = Används när vi vill lägga till data i en databas. **VALUES()** = Insert into följs av values. Mellan paranteserna skriver vi in den indata vi vill applicera i databasen. **UPDATE** = Används för att uppdatera data i en databas. **SET (WHERE)** = Bestäm vad och var datan ska uppdateras. **DESCRIBE** = Används för att se en beskrivning av datan i tabellen. **ORDER BY** (Asc / Desc) = *Sortera något i en viss ordning.* **as** = Används för att ge namn till kolumner ( SELECT name **as** Namn FROM Employee ) **LIKE** = Används för att hitta en matchning som inte är exakt lika men i närheten. **JOIN** = Används för att kombinera flera tabeller vid ett urval. T.ex titeln på en film och kategorin. **INNER JOIN** = En inre join, t.ex två tabeller **OUTER JOIN** = En utomstående join. Joina två olika databasers information i en sökning. \ **Aggregat funktioner:** *Består av ett antal färdiga metoder som vi kan använda i SQL, används för statistik. T.ex försäljning.* **Count()** - *Antal* **Avg()** - *Medelvärde* **Min()** - *Minimum* **Max()** - *Maximum* **Sum()** - *Summa* \ \ \ \ \ **Faktaruta** \ När vi hanterar och samlar data finns något som kallas **DBMS** (***Database management system****)*. Dessa delas in i 2 kategorier, **Relationella** (***Relational***) och **Icke-Relationella** (***NoSQL***). \ **Relational:** *I relationella databaser sorterar vi data i tabeller som sedan länkas samman (får relationer) mot varandra. I varje tabell sparas data av en viss typ. Språket som används för att sortera/modifiera datan kallas **SQL** (**Structured Query Language**). En Query används för att modifiera data. Det finns flertalet **RDBMS** (**Relational Database Management Systems**) Några av de vanligaste är* \ * *MySQL* * *SQL Server* * *Oracle* \ *Varje RDBMS har sin egen kryddning eller "Flavour" men det mesta är gemensamt dem sinsemellan.* \ **NoSQL:** *I Icke-Relationella databaser har vi varken tabeller eller relationer, därav namnet. De skiljer sig väldigt mycket från de relationella databaserna då de inte alls förstår SQL språket.* \ I MySQL är en databas uppbyggd på följande vis. Varje databas existerar som "**Schemas"** till vänster i menyn. I varje *Schema* finns "**Tables**", "**Views**", "**Stored Procedures**" och "**Functions**". **Tables** = *Här får vi en överblick av våra tabeller.* **Views** = *Virituella tabeller, här kan vi kombinera data från flera tabeller för att få en överblick.* **Stored Procedures** = *Färdiga metoder för att sortera objekt i tabellerna från givna kommandon* **Functions** = *Även detta en färdig metod.* \ **Maven** \ Maven är ett verktyg i Java som skapats av Apache, det används för att Automatisera byggandet av programfiler till en distribuerbar enhet. Den använder sig av XML kod. * **P**roject **O**bject **M**odel Genereras när man skapar en databas. Den är dock tom i början. Den innehåller : \ **Referenser:** (Grönt,namespace) *som Maven använder* **** (gult, under namespace) *Dylikt som paket mot Java Projektet.* **** (gult,under groupId) *vårt projektnamn* **** (gult, under artifactId) *vilken version vi använder. (OBS ENDAST STORA PROJEKT)* **SNAPSHOT** : *Används vid ofärdiga projekt* **RELEASE** : *Används när projektet är färdigt* **** *Beror på vilken version av java vi kö* **** *Kodord för att öppna ett dependency.* **Org.hibernate** : *samling av filer* \ **Xmlns** ( E**x**tensible **M**arkup **L**anguage **N**ame **S**pace) \ **JDBC** (*Java DataBase Connectivity) -* En samling filer som sköter om kommunikationen mellan vår applikation och databasen. Den är byggd så att den kan kommunicera med flera databaser samtidigt. Interface \ Det finns fyra olika kategorier av drivers till en JDBC \ ________________________________________________ \ **CRUD:** Create, read, Update, delete. \ ***Create -*** *Insert values and columns in table* ***Read -*** *Retrieve data from the table* ***Update*** *- Modifies data in the table* ***Delete*** *- Delete data from table* \ \ \ \ **Hibernate:** \ Hibernate är ett ***ORM ***verktyg (***Object-Relational Mapping***). Detta innebär att du kan kartlägga java klasser till databasens tabeller och konvertera java datatyperna till SQL datatyper. \ **JPA** (***Java Persistence API***) är en Java specifikation som tillhandahåller en viss funktionalitet och standard till ***ORM*** verktyget. **javax.persistence** paketet innehåller JPA klasserna och dess interface \ **@Kommandon:** \ @Entity = en typ av variabel, objekt osv. \ @OneToOne = en typ av relation. En person kan bara ha en address. Eller, en katt kan bara ha en ägare. \ @OneToMany = En ägare kan ha flera katter. \ @ManyToMany = Flera relationer som går flera vägar. T.ex en bilfirma som har flera kunder som hyr från ett stort sortiment bilar. \ \ \    