[S12L3] Foreign Keys Flashcards
Was ist ein Foreign Key?
-Ein Schlüssel in einem Table, welcher auf einen PrimaryKey eines anderen Tables referenziert
Können Tables in der DB mehrere oder auch keien Foreign Keys besitzen?
-Ja
Was ist ein Join?
- Eine Query um zusammengehörige Daten aus mehreren Tables zu erhalten
- Datensätze mit ForeignKeys aus mehreren Tables werden verbunden
Wie schreibt man einen Join?
-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;
Was ist eine INNER JOIN?
- 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
Was ist ein LEFT JOIN?
-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
Welche JOINS werden am meisten genutzt?
- 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)
Wie macht man JOINS in knex?
knex(‘users’).join(‘contacts’, ‘user.id’, ‘=’, ‘contacts.user_id’).select(‘user.id’, ‘contacts.phone’)
Was sind database access methods?
-
Wie sieht ein JOIN aus?
--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
Warum speichert man nicht alle Daten der Datenbank in einem großen Table?
- 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
Wie sieht ein JOIN mit ALIAS aus?
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
Gibt es in SQL zwischen distinct s.supplierid und distinct(s.supplierid) einen Unterschied?
-Nein, man kann distinct als Function oder Keyword benutzen
Welcher ist der Left (1.)Table bei einem JOIN?
-Der nach dem FROM
Warum ist das Denken in Datenbanken schwierig?
- 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