Zum Inhalt springen

MySQL-Befehle


Will_Malecken

Empfohlene Beiträge

Hi ich habe einige Probleme, was MySQL angeht. Für mich is das meiste noch ziemlich neu, weil ich das Fach noch nicht so lange in der Schule habe. Als Gruppe haben wir jetzt die Aufgabe eine Datenbank für ein Dateiverwaltungssystem zu erstellen. Die Attribute sollen dabei sein: Name, Größe, geändert am, Nutzer (eigene Entität) und Zugriffsrechte wie Lese- und Schreibrecht

Wir benutzen zurzeit das Programm SQLyog.

Die Aufgabe lautet:

Überlegt euch, welche Fragestellungen für ein Datenverwaltungsprogramm sinnvoll sind und erstellt die entsprechenden Queries.

Jetzt habe ich die Frage, welche Queries man machen könnte, da ich ehrlich gesagt mich überhaupt nicht mit den einzelnen Begriffen auskenne.

Ich habe hier mal das Entity-Relationship-Model zu der Aufgabe:

http://img404.imageshack.us/img404/9731/ermodell.jpg

Dabei wären ja z.B Fragen wie: Wann hat der Nutzer mit dem Namen ... die Datei mit der ID ... das letzte Mal geändert? oder einfach Welche Datei wurde zuletzt am ... geändert? sinnvoll.

Aber wie würden die Queries zu solchen Fragen heißen?

Könnte mir möglicherweise jemand dabei helfen und mir ein paar Vorschläge geben?

Wäre jedem sehr dankbar, der mir eine Antwort gibt. ;)

Link zu diesem Kommentar
Auf anderen Seiten teilen

  • Antworten 53
  • Erstellt
  • Letzte Antwort

Top-Benutzer in diesem Thema

Top-Benutzer in diesem Thema

Also zunächst bist Du im falschen Unterforum. Bitte doch einen der Moderatoren, dass er Deinen Beitrag verschiebt, dann erhältst Du vermutlich auch mehr Antworten.

Danach brauchen wir Deinen Ansatz. Du hast Dir ja schon überlegt, was Du abfragen willst. Wie sehen Deine Queries aus? Wenn Du noch gar nichts hast, dann versuche erst, mit Eigeninitiative etwas zu erstellen, was danach mit Hilfe des Forums verbessert und optimiert wird.

Weißt Du, wie SQL-Abfragen prinzipiell aufgebaut sind? Wenn nein, nachlesen. Wenn ja, dann versuche, in diesen Aufbau Deine Fragestellungen einzubauen.

Schöne Grüße,

Peter

Link zu diesem Kommentar
Auf anderen Seiten teilen

Warum, das ist der Anfang. Allerdings hat Du vergessen, was Du selektieren möchtest. :)

Und jetzt kannst Du nicht nur über eine Tabelle selektieren, sondern über mehrere, und kannst in der WHERE-Klausel ein wenig anspruchsvollere Dinge tun.

Nimm Dir mal eine Deiner skizzierten Abfragen vor und versuche, ein SQL-Statement zu formulieren.

Peter

Link zu diesem Kommentar
Auf anderen Seiten teilen

Ah okay ;D also ich benutz ja das Programm SQLyog und dafür hatten wir in der Gruppe schon diesen Text fertig:

DROP DATABASE Dateiverwaltungssystem ;

CREATE DATABASE Dateiverwaltungssystem ;

USE Dateiverwaltungssystem;

CREATE Table Datei(D_ID INT NOT NULL AUTO_INCREMENT PRIMARY KEY ,

Name varchar(25) Not Null,

Größe_in_MB varchar(25) Not Null,

Zuletzt_geaendert_am DATE Not Null);

CREATE Table Nutzer (N_ID INT NOT NULL AUTO_INCREMENT PRIMARY KEY ,

Nickname varchar(25)Not Null);

CREATE Table greift_zu (id int(10) NOT NULL auto_increment primary key ,

Leserecht varchar(5) NOT NULL,

Schreibrecht varchar(5) NOT NULL );

Und jetzt habe ich da mal eine Querie eingegeben. Die Frage war: Welche Datei wurde zuletzt am ... geändert?

SELECT D_ID, NAME FROM datei WHERE zuletzt_geaendert_am='2010-02-23';

Ist die soweit richtig? Mich wundert nur warum er das "Name" auch blau kennzeichnet als wäre es sowas wie "SELECT". Wir haben in der Tabelle noch nichts eingegeben aber eigentlich müsste diese Querie doch möglich sein oder? Auf jeden Fall zeigt er keinen Fehler und da kommen die beiden Spalten die ich haben will.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Das sieht zum Teil schon ganz gut aus.

Warum habt Ihr denn bei der Tabelle greift_zu bei der Primärschlüsseldefinition einen anderen Datentyp als bei den anderen genommen?

"name" ist ein reserviertes Wort in MySQL, deshalb könnte es hier Schwierigkeiten geben. Mit einfachen Anführungszeichen oder Backticks kann man den Feldnamen aber so maskieren, dass er dennoch funktioniert. Aber vermutlich zeigt Euer Werkzeug das Wort deshalb als Syntaxelement an.

Wie die genaue Syntax bei MySQL für die Angabe eines Datums als Zeichenkette ist, musst Du kurz in der Doku nachschauen, das weiß ich nicht auswendig. Aber es gibt auch Funktionen, mit denen Du die einzelnen Werte des Datums angeben kannst und den korrekten Datentyp erhältst, bzw. eine Zeichenkette plus ein bestimmtes Format angibst, und das als Datum interpretiert wird.

Das Schöne an SQL ist doch, dass man schnell was ausprobieren kann. Warum packt Ihr nicht einfach ein paar Datensätze in die Tabellen und probiert die Queries mal in echt aus? Das ist viel interessanter, als sie nur trocken aufzuschreiben.

Schöne Grüße,

Peter

Link zu diesem Kommentar
Auf anderen Seiten teilen

Moin,

..hatten wir in der Gruppe schon diesen Text fertig:

DROP DATABASE Dateiverwaltungssystem ;

CREATE DATABASE Dateiverwaltungssystem ;

USE Dateiverwaltungssystem;

CREATE Table Datei(D_ID INT NOT NULL AUTO_INCREMENT PRIMARY KEY ,

Name varchar(25) Not Null,

Größe_in_MB varchar(25) Not Null,

Zuletzt_geaendert_am DATE Not Null);

CREATE Table Nutzer (N_ID INT NOT NULL AUTO_INCREMENT PRIMARY KEY ,

Nickname varchar(25)Not Null);

CREATE Table greift_zu (id int(10) NOT NULL auto_increment primary key ,

Leserecht varchar(5) NOT NULL,

Schreibrecht varchar(5) NOT NULL );

Und jetzt habe ich da mal eine Querie eingegeben. Die Frage war: Welche Datei wurde zuletzt am ... geändert?

SELECT D_ID, NAME FROM datei WHERE zuletzt_geaendert_am='2010-02-23';

Ist die soweit richtig?

liegt das Problem ggf darin, dass keine Dateien angezeigt werden? Dann liegt das bestimmt daran, das du zwischen den Create-Kommandos und deinem Select-Statement offenbar kein einziges Insert-Kommando abgesetzt hast.

Das ist hier ungefähr so wie bei Verdauung; es kommt nur was raus, wenn man früher mal was eingefüllt hat.

hth

Reinhold

Link zu diesem Kommentar
Auf anderen Seiten teilen

Ja okay stimmt. Das müssen wir noch ändern. Wir haben uns nur die Arbeit aufgeteilt, deswegen sollte ich jetzt nur so ein paar Queries erstellen^^. Wäre besser wenn wir da erstmal was reinschreiben ;D Das mit dem Datum schau ich nochmal nach. Werde dann wahrscheinlich noch nacher schreiben oder spätestens morgen.

Dank euch schonmal wieder :D

Link zu diesem Kommentar
Auf anderen Seiten teilen

So ich habe jetzt einfach mal 4 einfache Queries... erstmal der Quelltext:

DROP DATABASE Dateiverwaltungssystem ;

CREATE DATABASE Dateiverwaltungssystem ;

USE Dateiverwaltungssystem;

CREATE Table Datei(D_ID INT NOT NULL AUTO_INCREMENT PRIMARY KEY ,

Dateiname varchar(25) Not Null,

Größe_in_MB varchar(25) Not Null,

Zuletzt_geändert_am DATE Not Null);

CREATE Table Nutzer (N_ID INT NOT NULL AUTO_INCREMENT PRIMARY KEY ,

Nickname varchar(25)Not Null);

CREATE Table Zugriff (N_ID int(10) NOT NULL auto_increment primary key ,

Leserecht varchar(5) NOT NULL,

Schreibrecht varchar(5) NOT NULL );

INSERT INTO Datei (Dateiname, Größe_in_MB, Zuletzt_geändert_am) VALUES ("Harry Potter.jpg", "1", "2008-11-02"), ("Informatik.gif", "5", "2010-02-22");

INSERT INTO Nutzer (Nickname) VALUES ("Hauke"), ("Christian"), ("Axelnator3000");

INSERT INTO Zugriff (Leserecht, Schreibrecht) VALUES ("Ja","Nein"), ("Ja","Ja"), ("Ja","Nein");

nur ein Beispiel^^

und jetzt die Queries:

SELECT D_ID, Dateiname FROM datei WHERE zuletzt_geändert_am='2008-11-02';

SELECT Dateiname, Größe_in_MB FROM datei WHERE Zuletzt_geändert_am='2010-02-22';

SELECT N_ID FROM Zugriff WHERE Leserecht='ja' AND Schreibrecht='nein';

SELECT N_ID FROM Zugriff WHERE Leserecht='ja' AND Schreibrecht='ja';

müsste eigentlich in Ordnung sein... Habe es auch schon getestet. Keine Fehler :P

Dann mach ich noch eine zu der Frage: Wie heißt die Datei, die größer ist als 3mb?

Das sollte dann reichen

Link zu diesem Kommentar
Auf anderen Seiten teilen

Oh besten dank für die Querie ;D

Und danke für eure schnellen Antworten...

Stimmt das wäre auch noch ne gute Idee bloß leider weiß ich nicht wie ich 2 Tabellen mit einander verknüpfen kann. Also ich mein eine Querie wie diese , die 2 Tabellen beinhaltet. Das wäre auch meine nächste Frage gewesen.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Genau beim Thema Abfragen über mehrere Tabellen wirst Du mit Deinem Modell höchstwahrscheinlich Probleme bekommen. Wenn ich Dein Datenmodell richtig verstehe, dann soll in der Tabelle Zugriff stehen, welcher User auf welche Datei welche Rechte hat, oder? Aber Du merkst Dir in der Zugriffstabelle ja nicht, für welchen User und welche Datei ein Recht besteht. Hier sind Fremdschlüsselbeziehungen gefragt.

Schöne Grüße,

Peter

Link zu diesem Kommentar
Auf anderen Seiten teilen

Sorry falls das schon gesagt wurde, aber dein relationales Modell ist keine korrekte Umsetzung des ERM:

CREATE Table Zugriff (N_ID int(10) NOT NULL auto_increment primary key ,

Leserecht varchar(5) NOT NULL,

Schreibrecht varchar(5) NOT NULL );

Stichworte: Fremdschlüssel, zusammengesetzter Primärschlüssel, schwache Entität bzw. n:m-Beziehung...

Bei der Argumentation, ob es sich um die 3.NF handelt würd' ich auch grummeln ;). Die Bedingungen der entsprechenden Normalformen sind auf der Wikipedia zu finden, und müssen im jeweiligen Fall auch angewendet werden. Doch bevor du das tust, würde ich mich erstmal um 'ne korrekte Abbildung deines ERD kümmern.

Gruß

Link zu diesem Kommentar
Auf anderen Seiten teilen

Okay dann brauch ich glaub ich noch Hilfe weil ich nicht wirklich weiß was da bei beiden noch falsch ist... Was die Normalform angeht könnte man ja die Tabellen noch mehr teilen aber ich meine dass unser Lehrer gesagt hatte, dass da 3 Tabellen rauskommen sollten. Ich hab mir auch nochmal alle Normalforemn angeschaut und ich wüsste jetzt leider nicht was noch falsch sein könnte.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Hast du dich mal über die Stichworte informiert, die karl-heinz dir genannt hat?

Wenn ich das richtig verstanden habe, soll deine Zugriff-Tabelle doch speichern, welcher Nutzer auf welche Datei zugreift. Das ist aber gar nicht möglich, weil diese Tabelle keine Fremdschlüssel hast. Du kannst einen Datensatz in dieser Tabelle weder einer Datei noch einem Nutzer zuordnen.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...