Will_Malecken Geschrieben 22. Februar 2010 Teilen Geschrieben 22. Februar 2010 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. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
kingofbrain Geschrieben 23. Februar 2010 Teilen Geschrieben 23. Februar 2010 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 Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Klotzkopp Geschrieben 23. Februar 2010 Teilen Geschrieben 23. Februar 2010 Verschoben -> Datenbanken Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Will_Malecken Geschrieben 23. Februar 2010 Autor Teilen Geschrieben 23. Februar 2010 Oh okay danke schonmal an euch. Ich werds mal versuchen. Habe da nicht so wirklich Ahnung von. Ich kenne z.B nur sowas wie: SELECT FROM Kunden WHERE ID=3 Also man sieht ja schon wie viel Ahnung ich davon habe Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
kingofbrain Geschrieben 23. Februar 2010 Teilen Geschrieben 23. Februar 2010 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 Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Will_Malecken Geschrieben 23. Februar 2010 Autor Teilen Geschrieben 23. Februar 2010 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. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Will_Malecken Geschrieben 23. Februar 2010 Autor Teilen Geschrieben 23. Februar 2010 Achja genau noch eine Frage. War das so richtig mit dem Datum oder wie muss man die auch noch eingeben? Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
kingofbrain Geschrieben 23. Februar 2010 Teilen Geschrieben 23. Februar 2010 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 Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Reinhold Geschrieben 23. Februar 2010 Teilen Geschrieben 23. Februar 2010 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 Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Will_Malecken Geschrieben 23. Februar 2010 Autor Teilen Geschrieben 23. Februar 2010 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 Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Will_Malecken Geschrieben 23. Februar 2010 Autor Teilen Geschrieben 23. Februar 2010 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 Dann mach ich noch eine zu der Frage: Wie heißt die Datei, die größer ist als 3mb? Das sollte dann reichen Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Will_Malecken Geschrieben 23. Februar 2010 Autor Teilen Geschrieben 23. Februar 2010 Würde mich freuen falls ihr noch Verbesserungsvorschläge habt ;D Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
AFFE_MIT_WAFFE Geschrieben 23. Februar 2010 Teilen Geschrieben 23. Februar 2010 Dann mach ich noch eine zu der Frage: Wie heißt die Datei, die größer ist als 3mb? SELECT Dateiname FROM datei WHERE Größe_in_MB>3 Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Klotzkopp Geschrieben 23. Februar 2010 Teilen Geschrieben 23. Februar 2010 Das sollte dann reichenIch weiß ja nicht. Wie wäre es denn mit einer Abfrage, die eine Verbundoperation beinhaltet? Ein realitätsnaher Anwendungsfall wäre beispielsweise die Frage, ob ein Nutzer namens X die Datei namens Y verändern darf. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Will_Malecken Geschrieben 23. Februar 2010 Autor Teilen Geschrieben 23. Februar 2010 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. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Klotzkopp Geschrieben 23. Februar 2010 Teilen Geschrieben 23. Februar 2010 SQL ? Wikipedia Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Will_Malecken Geschrieben 23. Februar 2010 Autor Teilen Geschrieben 23. Februar 2010 Okay ich werd mal schauen...Werde aber erst morgen weitermachen. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
kingofbrain Geschrieben 24. Februar 2010 Teilen Geschrieben 24. Februar 2010 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 Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Reinhold Geschrieben 24. Februar 2010 Teilen Geschrieben 24. Februar 2010 Moin, Ein realitätsnaher Anwendungsfall wäre beispielsweise die Frage, ob ein Nutzer namens X die Datei namens Y verändern darf. was allerdings daran scheitern dürfte, das sein Datenmodell das gar nicht hergibt... oder habe ich etwas übersehen? Reinhold Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Will_Malecken Geschrieben 24. Februar 2010 Autor Teilen Geschrieben 24. Februar 2010 Achso ja genau. Das wollte ich auch eigentlich nur wissen ob das hier überhaupt klappt, weil das Modell ist normalerweise richtig so von der Aufgabe her. Also unser Leher hatte nichts anderes erwähnt. danke Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Will_Malecken Geschrieben 24. Februar 2010 Autor Teilen Geschrieben 24. Februar 2010 Oh ja eins noch. Wir sollen noch überprüfen ob wir das in der 3.Normalform haben und das haben wir doch oder? Das heißt doch eigentlich nur, dass man das alles in 3 Tabellen aufgeteilt hat und nicht in einer einzigen, also jede mit einer ID und einem Namen z.b. oder? Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
karl-heinz Geschrieben 24. Februar 2010 Teilen Geschrieben 24. Februar 2010 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ß Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Will_Malecken Geschrieben 24. Februar 2010 Autor Teilen Geschrieben 24. Februar 2010 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. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Will_Malecken Geschrieben 24. Februar 2010 Autor Teilen Geschrieben 24. Februar 2010 Oder meinst du, dass man noch eine zusätzliche Tabelle mit den ganzen Nummern bzw. IDs machen sollte? Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Klotzkopp Geschrieben 24. Februar 2010 Teilen Geschrieben 24. Februar 2010 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. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Empfohlene Beiträge
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.