[S12L3] Foreign Keys Flashcards

1
Q

Was ist ein Foreign Key?

A

-Ein Schlüssel in einem Table, welcher auf einen PrimaryKey eines anderen Tables referenziert

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
2
Q

Können Tables in der DB mehrere oder auch keien Foreign Keys besitzen?

A

-Ja

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
3
Q

Was ist ein Join?

A
  • Eine Query um zusammengehörige Daten aus mehreren Tables zu erhalten
  • Datensätze mit ForeignKeys aus mehreren Tables werden verbunden
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
4
Q

Wie schreibt man einen Join?

A

-Alles was man joined muss auf den ersten Table auf den man selected linken.

SELECT OrderID, CustomerName, OrderDate
FROM Orders AS O
JOIN Customers AS C
ON O.CustomerId = C.CustomerId
Join Shippers AS S
ON O.ShipperId = S.ShipperID;
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
5
Q

Was ist eine INNER JOIN?

A
  • Der JOIN selected nur Datensätze aus den Tables bei welchen der zusammenhängende Daten findet
  • Eine Order die keinen Customer zugehört wird nicht aufgelistet werden
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
6
Q

Was ist ein LEFT JOIN?

A

-Ein JOIN bei welchem alle Daten aus dem ersten SELECT aufgelistet werden, egal ob diese einen zugehörige Order aus dem zweiten JOIN Table haben

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
7
Q

Welche JOINS werden am meisten genutzt?

A
  • INNER JOIN (alle Daten die in beiden Tables gelinked sind und zugehörige Primarykeys haben, aber manche Daten werden nicht aufgelistet)
  • LEFT JOIN (Alle Daten aus erster Table egal ob zugehörige in zweitem JOIN Table sind und die welche gejoined werden können)
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
8
Q

Wie macht man JOINS in knex?

A

knex(‘users’).join(‘contacts’, ‘user.id’, ‘=’, ‘contacts.user_id’).select(‘user.id’, ‘contacts.phone’)

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
9
Q

Was sind database access methods?

A

-

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
10
Q

Wie sieht ein JOIN aus?

A
--Foreign Key
SELECT SupplierName, ProductName
FROM Products AS P
INNER JOIN Suppliers AS S
ON P.supplierId = S.supplierId
ORDER BY SupplierName

select suppliers.SupplierName , categories.CategoryName, products.ProductName
from products inner
join suppliers on products.SupplierID = suppliers.SupplierID
join categories on products.CategoryID = categories.CategoryID
order by supplierName

--Foreign Key
SELECT p.ProductName, c.CategoryName
FROM Products as p
INNER JOIN Categories as c
ON p.CategoryID = c.CategoryID
ORDER BY p.ProductName
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
11
Q

Warum speichert man nicht alle Daten der Datenbank in einem großen Table?

A
  • Viele redundante Daten wie die Herstellerdaten vieler Produkte hunderte Male vorhanden
  • Wenn man die Adresse des Hersteller ändern möchte muss man nun hunderte von Datensätzen ändern anstatt nur eine
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
12
Q

Wie sieht ein JOIN mit ALIAS aus?

A

select s.SupplierName , c.CategoryName, p.ProductName
from products AS P inner
join suppliers AS S on p.SupplierID = s.SupplierID
join categories AS C on p.CategoryID = c.CategoryID
order by supplierName

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
13
Q

Gibt es in SQL zwischen distinct s.supplierid und distinct(s.supplierid) einen Unterschied?

A

-Nein, man kann distinct als Function oder Keyword benutzen

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
14
Q

Welcher ist der Left (1.)Table bei einem JOIN?

A

-Der nach dem FROM

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
15
Q

Warum ist das Denken in Datenbanken schwierig?

A
  • Weil man immer im Sets denkt und nicht in Objects oder Variablen
  • Man erhält immer Collections zurück und muss mit VENN Logik die richtigen Subsets herauslesen
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
16
Q

Wie kann man aus der DB das günstigste Product erhalten?

A

SELECT ProductId, MIN(Price) FROM [Products]

Select * FROM products
order by price
limit 1

17
Q

Was ist SQL GROUP BY?

A
  • Reducing der doppelten Einträge als Collections
  • Nehme eine Collection und alle die du davon findet mache darauf eine Operation und gebe mir nur das Ergebnis für die Collection
18
Q

Wie kann man in SQL den Kategorienamen des günstigten Produktes finden?

A
SELECT CategoryName, min(Price) AS Cheapest
FROM Categories AS C
INNER JOIN Products AS P
ON c.categoryID = p.categoryID
GROUP BY CategoryName
SELECT CategoryName, max(Price) AS Priciest
FROM Categories AS C
INNER JOIN Products AS P
ON c.categoryID = p.categoryID
GROUP BY CategoryName
19
Q

Wie erhält man in SQL die total Quantity per OrderID und davon die höchsten 5?

A
-- Total Quantity per ORDER ID höchsten 5
SELECT OrderID, sum(Quantity) AS Sum
FROM OrderDetails
GROUP BY OrderID
order by sum desc
limit 5
20
Q

Was ist ein Problem mit SQLite?

A

-ForeignKeys werden nicht direkt enforced, sondern es muss explizit erwähnt werden in der knexfile
-Ab dann werden ForeignKeys contrained und keine inkonsistenten Daten mehr erlaubt zu speichern
pool: {
afterCreate: (conn, done) => {
// runs after a connection is made to the sqlite engine
conn.run(‘PRAGMA foreign_keys = ON’, done); // turn on FK enforcement
},
},

21
Q

Was ist wenn die functionalitäten von knex nicht ausreichen und man spezielle SQL schreiben will?

A

-Es gibt joinRaw, whereRaw etc bei welchen man besondere Anweisungen definieren kann

22
Q

Was ist der größte Angriffspunkt von Datenbanken und den meisten IT-Systemen?

A

-SQL Injection, welche entstehen wenn man Queries konkateniert
-Knex Query Builder schützt und größtenteils davor und geben einen Alert wenn man eine Query schreibt die anfällig ist
-ORMs können ebenfalls genutzt werden wenn man mehr und volle Funktionalitäten für SQL haben möchte
(Sequelizejs)
-Query Builder sind dabei eher der Sweet Spot zwischen Funktionalität und Schutz