Announcement

Collapse
No announcement yet.

Zähler für Datenbank

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Zähler für Datenbank

    Hi ich habe ein problem bei einer aufgabe
    und zwar möchte ich folgendes in die unten stehende aufgabe einbauen aber es klappt noch net so wirklich

    Schulen dürfen bis zu 100 Medien, alle anderen Einrichtungen bis zu 30 Medien
    und Personen (egal, ob sie einer Einrichtung angehören oder nicht) bis zu 5 Medien
    gleichzeitig ausleihen.


    Code:
    create table videothek_einrichtung (
    e_ausweissnr int not null constraint einrichtung_pk primary key,
    name varchar2(30) not null,
    einrichtungsart varchar2(30) not null constraint einrichtung_chk check  (upper(einrichtungsart) in ('SCHULE', 'FIRMA') ),
    ausleih_zhl int
    );
    
    create table videothek_person (
    p_ausweissnr int not null constraint person_pk primary key,
    name varchar2(30) not null,
    e_ausweissnr int constraint einrichtung_fk references videothek_einrichtung,
    ausleih_zhl int
    );
    
    create table videothek_medium (
    Inventarnr int not null constraint medium_pk primary key,
     Typ varchar2(1) default 'C' not null constraint chk_Objtyp check (upper(Typ) in ('D','V','C')), /* C=CD, V=Videokassette, D=DVD */
    hersteller varchar2(30) not null,
    Titel varchar2(30) not null,
    p_ausweissnr int constraint medium_person_fk references videothek_person,
    e_ausweissnr int constraint medium_einrichtung_fk references videothek_einrichtung, 
    Ausleih_dt Date DEFAULT sysdate,  
    rueckgabe_dt date,
    CONSTRAINT medium_verfuegbar CHECK (e_ausweissnr IS NULL OR p_ausweissnr IS NULL) 
    );
    
    create table videothek_hat_ausgeliehen (
    Ausleih_dt Date DEFAULT sysdate,
    Inventarnr int not null, 
    p_ausweissnr int not null,
    CONSTRAINT pk_hat_ausgeliehen PRIMARY KEY(Inventarnr, p_ausweissnr, Ausleih_dt),
    constraint fk_h_a_von_Medium foreign key (inventarnr) references Videothek_Medium,
    constraint fk_h_a_von_Person foreign key (p_ausweissnr) references Videothek_Person
    );

  • #2
    Originally posted by sinistar View Post

    ...aber es klappt noch net so wirklich
    ...und WAS klappt nicht ? Was hast du bereits gemacht ? Fehlermeldung ?
    Welche DB ist es ? Fragen über Fragen...


    Gruss

    Comment


    • #3
      was genau meinst du mit was für eine DB ist das.
      Es soll ne videothek werden wo es personen und einrichtungen gibt die cd's, dvd's und videos ausleihen können.
      also ich hab mir ja da 2 zähler erstellt
      ausleih_zhl int
      jeweils für Personen und Einrichtungen.
      Nur weiß ich jetzt net weiter wie ich es hinbekomme das ich nen Ausleihlimit habe das z.B. für Schulen bei 100 liegt
      Fehlermeldungen zu diesem fall fehlen mir noch

      Comment


      • #4
        Originally posted by sinistar View Post
        was genau meinst du mit was für eine DB ist das.
        Nein. Benutzt du MS-SQL oder MySql oder Firebird oder Oracle oder SQLite oder was auch immer...

        Jedes DBMS hat seinen eigenen SQL-Dialekt. Wegen VARCHAR2 vermute ich, dass es Oracle ist, aber nur du kannst das sagen.

        Wenn das so ist, gehört es in das Unterforum für Oracle, aber das muss erst geklärt werden... Und was ist mit den anderen Nachfragen?

        Es soll ne videothek werden wo es personen und einrichtungen gibt die cd's, dvd's und videos ausleihen können.
        Das war verständlich gefragt. Du solltest aber anders vorgehen.

        1. Tabelle "Ausleiher"
        2. Tabelle "Ausleihvariante"
        3. Tabelle "Medium"
        4. Tabelle "Ausleihung"

        In der zweiten Tabelle stehen die ID der Variante, die Beschreibung (Person, Schule, Institution), das Maximum. In der ersten Tabelle wird per ForeignKey auf die jeweilige Variante verwiesen.

        Die vierte Tabelle enthält lediglich Verknüpfungen zwischen der ersten und der dritten Tabelle (sogar auf eine eigene ID kann in diesem Fall verzichtet werden) und beschreibt, wer welches Medium ausgeliehen hat.

        Nur weiß ich jetzt net weiter wie ich es hinbekomme das ich nen Ausleihlimit habe das z.B. für Schulen bei 100 liegt
        Fehlermeldungen zu diesem fall fehlen mir noch
        Zum Zeitpunkt der Ausleihe (also des Speicherns in der vierten Tabelle) wird abgefragt, ob die Anzahl der in der 4. Tabelle bereits registrierten Verknüpfungen den Maximalwert gemäß 1.+2. Tabelle überschreitet.

        Das wird am besten in einem Trigger (oder einer StoredProcedure) unter Benutzung eines SELECT mit passenden JOIN erledigt. Siehe dazu auch wikibooks: Einführung in SQL.

        Angesichts der Nachfragen befürchte ich aber, dass das deine Fähigkeiten noch übersteigt. Aber wie gesagt: Was hast du denn schon probiert?

        Gruß Jürgen

        PS an Moderator: Jetzt gehen die BBCodes wieder.

        Comment


        • #5
          Er meint der Hersteller der Datenbank (Microsoft, Oracle...)

          Ich kann mir nicht vorstellen wie man so etwas NUR mit SQL, also ohne DB Hersteller spezifischen features (Stored Procedures, Triggers), hinbekommt

          Comment


          • #6
            Er wird die Software selbst wahrscheinlich auch noch in irgendeiner Sprache schreiben. Es ist also vielleicht auch gar nicht notwendig und unter Umständen viel zu kompliziert alles von der DB erledigen zu lassen.
            "(...) deshalb mag ich Binärtechnik. Da gibt es nur drei Zustände: High, Low und Kaputt." (Wau Holland)

            Viele Grüße Novi

            Comment


            • #7
              Ja es ist Oracle mit dem wir arbeiten. Dan bin ich hier wohl falsch?es stimmt aber das ich noch ganz am anfang stehe.

              Bei der Lösung mit dem Trigger sitzte ich momentan grade dran
              Sobald der von Ihnen angepasste Trigger fehlerfrei ist, entwickeln Sie nach seinem
              Beispiel zwei weitere Trigger manage_Person_Counter und manage_Einr_Counter zur Verwaltung der Zähler in der Personen-Tabelle und in der Einrichtungen-Tabelle!


              habe aber leider bei der alten aufgabe den teil net verstanden und der soll wichtig sein.
              Wir haben halt erst ein ER_modell für die videothek entworfen und das in sql-code umgewandelt.
              Und ein punkt war halt das von mir oben beschriebene limit.
              Ich meine wir stehen ganz am anfang von DB da sollten wir noch net mit triggern arbeiten also müsste es doch evtl. eine primitivere lösung geben.

              An der stelle fügen wir ja auch noch nix ein in die DB

              Comment

              Working...
              X