Zum Inhalt springen
View in the app

A better way to browse. Learn more.

Fachinformatiker.de

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

MySQL-Befehle

Empfohlene Antworten

Achso ich dachte eigentlich, dass nur allgemein drin steht, wer welche Rechte auf die Dateien hat. Also nur irgendeine Datei oder alle Dateien. Aber warum kann er das keinem Nutzer zuordnen? Da steht doch die Nutzer ID bei. Oder muss ich dann eine Tabelle machen, in der die Datei ID und die Nutzer ID steht damit er das zuordnet?

  • Antworten 53
  • Ansichten 6.1k
  • Erstellt
  • Letzte Antwort

Also die N_ID, die Du dort für Zugriff definierst, ist kein Fremdschlüssel auf die User-Tabelle. Es wurden Dir jetzt schon diverse Male die nötigen Stichworte genannt. Zeig doch ein wenig Eigeninitiative und informier Dich mal zu den Themen referentielle Integrität, Primär- und Fremdschlüssel und den evtl. anderen genannten Themen.

Peter

Tut mir leid aber irgendwie versteh ich immernoch nicht wie das mit den Fremdschlüsseln geht... Ich habe schon recherchiert aber ich versteh das nicht ganz. Also man muss einen Fremdschlüssel für einen Primärschlüssel erstellen damit dieser auf einen anderen Primärschlüssel zugreifen kann. Stimmt das?

Hab schon einiges versucht... Z.B dieses:

ALTER TABLE zugriff ADD CONSTRAINT FOREIGN KEY (N_ID) REFERENCES nutzer (N_ID)); das bei create table zugriff

Na das ist doch schon was! Allerdings vergibst du auch in der Tabelle Zugriff, die Werte für N_ID automatisch. Macht das Sinn? Was tut den deine Foreign Key Constraint? Sie stellt doch sicher, dass der Fremdschlüssel auch als Primärschlüssel bereits existiert. Wie kommt ein solcher Fremdschlüssel also zustande? Da er auch als Primärschlüssel existieren muss, kann er erst danach manuell angelegt werden, oder?

Kleiner Tipp, geh' hier doch mal etwas strukturierter vor, und dokumentiere das auch für uns:

  • Erzeuge z.B. ein kleines Datenbeispiel,
  • welche Attribute sind Primärschlüssel und welche sind Fremdschlüssel oder
  • schreib' auf was du darunter bis jetzt verstehst.

Gruß

Primär- und Fremdschlüssel sind doch im Prinzip das gleiche. Das sind doch meistens IDs oder? Und wenn man dann z.B in einer zweiten Tabelle auch eine ID hat, die praktisch der ersten Tabelle sagen soll, dass es sich um die und die Datei handelt, dann muss man doch einfach noch eine Fremdschlüsselsyntax zur Primärschlüsselsyntax dazu packen, damit der weiß, dass der Primärschlüssel gleichzeitig auch der Fremdschlüssel sein soll oder so?

Oh man ich glaub ich weiß es wirklich nicht xD

Na dann mach jetzt erstmal ein Beispiel (SQL) mit zwei Tabellen Dokument und Link. Beide haben einen Namen, und bei Link wird zusätzlich angeben, auf welches Dokument er 'zeigt'. Für beide sollst du einen künstlichen Primärschlüssel verwenden. Und am Ende bitte noch drei Inserts: Ein Dokument 'Foo' und 'Bar' und ein Link 'Foolink', der auf 'Foo' zeigt. Los geht's und vergiss die Kommentare nicht ;).

Gruß

Okay ich werds gleich versuchen weil es gerade ein bisschen knapp wird mit der Zeit. ;D

Ich habe jetzt schon Probleme xD Ich versteh bloß grad nicht warum.

CREATE DATABASE Beispiel;

USE Beispiel;

CREATE Table Dokument(Dokumentname INT NOT NULL AUTO_INCREMENT PRIMARY KEY ,

Dokumentname varchar(25) Not Null,

D_ID varchar(25) Not Null);

CREATE Table Link (Linkname INT NOT NULL AUTO_INCREMENT PRIMARY KEY ,

Linkname varchar(25) Not Null,

L_ID varchar(25) NOT NULL);

Ah schon erledigt :D nur wie meinst du das mit "worauf der Link zeigt"? Was muss ich da denn machen?

Unabhängig von deiner letzten Frage, poste bitte noch mal die korrigierte Version :cool:.

Hier:

DROP DATABASE Beispiel;

CREATE DATABASE Beispiel;

USE Beispiel;

CREATE TABLE Dokument(D_ID INT NOT NULL AUTO_INCREMENT PRIMARY KEY ,

Nickname VARCHAR(25) NOT NULL);

CREATE TABLE Link (L_ID INT NOT NULL AUTO_INCREMENT PRIMARY KEY ,

Nickname VARCHAR(25) NOT NULL);

INSERT INTO Dokument (Nickname) VALUES ("Foo"), ("Bar");

INSERT INTO Link (Nickname) VALUES ("Foolink");

Willst du überhaupt IDs haben? :D oder andere Frage: Geht das überhaupt ohne ID?

Erstmal der Anfang... Ich weiß nicht wirklich wie ich jetzt weiter machen muss.

Sehr Gut! Einzig der Attributname 'Nickname' stört mich ein wenig, aber mit Ausnahme, der letzten Forderung hast du allet richtig gemacht :).

Zu der Frage ob ich IDs möchte: Jep ich wollte welche (künstlicher Primärschlüssel). Ob man dis auch anders machen könnte? Ja, angenommen der Name eines Dokumentes muss eindeutig sein, so könntest du stattdessen auch 'Name' verwenden (natürlicher Primärschlüssel) und 'D_ID' weglassen, da es ja dann nicht mehr gebraucht werden würde.

Was hab' ich nun mit 'zeigt auf' gemeint? Wat hat denn ein Html-Link für ein Attribut? Richtig 'href'. Und wat steht drin? Na die Adresse der Webseite auf die 'verlinkt' wird. Was wäre also die Dokumentadresse in deinem Fall?

Gruß

Okay gut ;D

Aber das href bringt mich jetzt voll raus :/ Was muss ich denn jetzt damit machen? Ich glaub solangsam sitz ich da schon zu lange vor :D

Also ich hab noch nie was mit Fremdschlüsseln gemacht. Weiß überhaupt nicht wie das geht und wo ich weiter machen muss^^.

Hm okay... Wie bekomm ich folgendes hin: "Foolink"->"Foo"? Anders gesagt wie bekomme ich es hin, dass wenn ich "Foolink" kenne, dass ich auch "Foo" kenne?

Nach deinen Inserts sollte ja ungefähr Folgendes in der DB stehen:

Dokument:

(1,'Foo')

(2,'Bar')

Link:

(1,'Foolink')

Du musst jetzt nur noch Link ändern, so das folgendes in der DB wäre:

(1,'Foolink',1)

Bearbeitet von karl-heinz

Genau.

Das versteh ich nicht. Wo muss die 1 hin? Noch eine neue Spalte in der Tabelle?

CREATE DATABASE Beispiel;

USE Beispiel;

CREATE TABLE Dokument(D_ID INT NOT NULL AUTO_INCREMENT PRIMARY KEY ,

Nickname VARCHAR(25) NOT NULL);

CREATE TABLE Link (L_ID INT NOT NULL AUTO_INCREMENT PRIMARY KEY ,

Nickname VARCHAR(25) NOT NULL,

D_ID VARCHAR(25) NOT NULL);

INSERT INTO Dokument (Nickname) VALUES ("Foo"), ("Bar");

INSERT INTO Link (Nickname, D_ID) VALUES ("Foolink", "1");

so is es nicht gemeint oder?

Ja! Und zwar in der Link-Tabelle (z.B. Link.D_ID oder Link.Dokument als int). D.h. also, du 'nimmst' dir den Primärschlüssel der betreffenden Tabelle (hier Dokument.D_ID) und 'verwendest' ihn in der anderen Tabelle (Link) als Fremdschlüssel, indem du ihn dort als Spalte anlegst (beide Datentypen müssen übereinstimmen!). Und dann kannst du noch eine CONSTRAINT für Link definieren, die sicherstellt, dass wenn du einen Wert in Link.D_ID reinschreibst, dieser auch in Dokument.D_ID existiert. Aber du kannst kein AUTO_INCREMENT für den Fremdschlüssel verwenden! Und wenn du jut bist, sachste mir noch kurz warum ;)...

CREATE DATABASE Beispiel; 

USE Beispiel;


CREATE TABLE Dokument(D_ID INT NOT NULL AUTO_INCREMENT PRIMARY KEY , 

Nickname VARCHAR(25) NOT NULL);


CREATE TABLE Link (L_ID INT NOT NULL AUTO_INCREMENT PRIMARY KEY ,

Nickname VARCHAR(25) NOT NULL,

D_ID VARCHAR(25) NOT NULL);


INSERT INTO Dokument (Nickname) VALUES ("Foo"), ("Bar");

INSERT INTO Link (Nickname, D_ID) VALUES ("Foolink", "1");

so is es nicht gemeint oder?

Doch fast, aber du hast nicht denselben Datentypen für den Fremdschlüssel verwendet, und dat ist weshalb problematisch?

Sry schreib später... Hab im Moment keine Zeit mehr :/

Es muss ja gleich sein, weil er das sonst nicht zuordnen könnte oder? :D

Das mit dem Auto_Increment weiß ich nicht. Ich kenn eigentlich die ganze Bezeichnung gar nicht wenn ich ehrlich bin, ich weiß nur dass das dahin muss^^.

Ähm okay dafür brauch ich aber noch bisschen Zeit ;) Ich schreib gleich nochmal

DROP DATABASE Beispiel;

CREATE DATABASE Beispiel;

USE Beispiel;

CREATE TABLE Dokument(D_ID INT NOT NULL AUTO_INCREMENT PRIMARY KEY ,

Nickname VARCHAR(25) NOT NULL);

CREATE TABLE Link (L_ID INT NOT NULL AUTO_INCREMENT PRIMARY KEY ,

Nickname VARCHAR(25) NOT NULL,

D_ID VARCHAR(25) NOT NULL);

INSERT INTO Dokument (Nickname) VALUES ("Foo"), ("Bar");

INSERT INTO Link (Nickname, Link.D_ID) VALUES ("Foolink", "1");

Also ganz leicht einfach so? Fehler sind schonmal nicht drin ;D

Archiv

Dieses Thema wurde archiviert und kann nicht mehr beantwortet werden.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.