Fragen über Datenbanken

[quote=CyborgBeta]Kommen wir nun zu Namenskonventionen. Auch eigentlich ein spannendes Thema.[/quote]Ja und ein wichtiges.

in unseren Projekten geben wir den Tabellen 4-buchstabige Aliasse, die sich aus dem Tabellennamen ableiten ( select abcd.* from another_bloody_creapy_datatable abcd).

In den Tabellen gibt es dann einen Primärschlüssel, dessen Attribut-Name aus dieser Abkürzung und dem Suffix ‘_ID’ besteht:
[SQL]create Table another_bloody_creapy_datatable(
abcd_id integer constraint abcd_pk primary key,

);[/SQL]

[quote=CyborgBeta;113280]Spalten/Attribute richtig benannt, auch mit Blick auf natural Join, natürlicher Join?[/quote]Wie gesagt ist “natural join” sehr gefährlich und kann dazu führen, dass Du diese später sowieso auflösen musst.
Interessanter ist da schon die JOIN ... USING(Attr_1,Attr_2,....)Syntax. Dafür mussen die Spalten aber auch gleich heißen, über die der Join ausgeführt werden soll. Dabei hilft das “Alias-Präfix”-Verfahren sowohl bei PK- als auch bei FK- Attributen anzuwenden.

Ob man ID als Suffix oder Präfix anfügt ist dann schon fast Geschmackssache, aber als Suffix “klingt’s” irgendwie besser…

bye
TT

Es geht weiter. Ich hab “Inkonsistenzen” entdeckt. Verkleinert soll folgendes Beispiel gegeben sein:

[SQL]DROP DATABASE IF EXISTS mydbs;

CREATE DATABASE mydbs;

USE mydbs;

CREATE TABLE BB (
id SMALLINT AUTO_INCREMENT NOT NULL UNIQUE PRIMARY KEY,
bname VARCHAR(150) NOT NULL);

CREATE TABLE AA (
id SMALLINT AUTO_INCREMENT NOT NULL UNIQUE PRIMARY KEY,
aname VARCHAR(150) NOT NULL,
id_bb SMALLINT UNIQUE, /* darf NULL sein, obwohl eindeutig verlangt wird */
FOREIGN KEY (id_bb) REFERENCES BB (id));

INSERT INTO BB (bname) VALUES
(‘nAme 1’),
(‘nAme 2’),
(‘nAme 3’);

INSERT INTO AA (aname, id_bb) VALUES
(‘nAme 1’, NULL),
(‘nAme 2’, 2),
(‘nAme 2 und weiter’, NULL),
(‘nAme 3 und weiter’, NULL);

/* Eintrag 1 aus BB muss noch mit Eintrag 1 aus AA verbunden werden,
Eintrag 2 aus AA ist richtig mit Eintrag 2 aus BB verbunden, check,
Eintrag 3 aus AA kann nicht mit Eintrag 2 aus BB verbunden werden, da schon verbunden,
Eintrag 4 aus AA könnte mit Eintrag 3 aus BB verbunden werden, da die ersten 6 Buchstaben übereinstimmen
und Eintrag 3 aus BB noch mit keinem Eintrag aus AA verbunden ist. */[/SQL]

mysql> SELECT * FROM AA, BB WHERE SUBSTRING(aname,1,6) = SUBSTRING(bname,1,6);
+----+-------------------+-------+----+--------+
| id | aname             | id_bb | id | bname  |
+----+-------------------+-------+----+--------+
|  1 | nAme 1            |  NULL |  1 | nAme 1 |
|  2 | nAme 2            |     2 |  2 | nAme 2 |
|  3 | nAme 2 und weiter |  NULL |  2 | nAme 2 |
|  4 | nAme 3 und weiter |  NULL |  3 | nAme 3 |
+----+-------------------+-------+----+--------+
4 rows in set (0.00 sec)

mysql>

Äehheh, “verweiste” Einträge. Ich suche nach, 1) Welche Fremdschlüssel sind NULL?, 2) Welche Einträge aus AA stehen mit welchen Einträgen aus BB in Verbindung?, 3) Welche Einträge aus BB könnten noch mit welchen Einträgen aus AA verbunden werden?, Wie lautet sozusagen die “Einfügoperation”?, 4) Ist so ein Ablauf allgemein gut/sinnvoll?.

Danke, wer das lesen möchte und mir sozusagen etwas auf die Sprünge helfen möchte. Vielleicht ist meine Weg auf absolut falsch.

Eh, keiner hat sich gemeldet.

Könnt ihr mir etwas über NATURAL JOIN sagen, was ist dabei für euch wichtig, über die für euch wichtigen/wichtigsten Aggregat Funktionen, group by und having sowie wichtige SchichtenModelle?

Ich würde nicht nachfragen, wenn ich das alles schon wüsste, die Prüfung ist bald.

Normalfor. verstehe ich gar nicht, aber das hatte ich BG auch geschrieben. Gibt es ein “Rezept” dafür? Danke und grüße.

Edit: Und ein Beispiel für eine Abfrage in einer Abfrage ohne MINUS.

Edit 2: Das Beispiel oben mit den angeblichen “Inkonsistenzen” hab ich mir ausgedacht, das ist nicht aus einem Buch “geklaut”.

Ja, vergiss ihn nach deiner Prüfung. Habe ich in meinem ganzen Berufsleben noch nie eingesetzt.

Bei einem Join schreibt man immer die verwendeten Spalten hin.

Sind super wichtig und man kommt ohne die nicht aus: SUM, AVG, MAX, MIN, COUNT,…

Welche Schichten? Welche Modelle?

Diese Information liegt also bereits vor.

Ja, normalisieren: Normalisierung (Datenbank)

[quote=CyborgBeta]Eh, keiner hat sich gemeldet.

Könnt ihr mir etwas über NATURAL JOIN sagen[/quote]Warum soll ich mich wiederholen? Ich hatte das doch ausführlich in Antwort #15 beschrieben…

bye
TT