Announcement

Collapse
No announcement yet.

Unique Index bei gewachsener Datenstruktur (ib 6.0.1.6)

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

  • Unique Index bei gewachsener Datenstruktur (ib 6.0.1.6)

    Hallo #<p>
    folgende Tabelle habe ich hier:
    <br>

    <pre>
    projects:
    id integer (über generator erzeugt)
    preid integer (Verweis auf Id bei Positionen,
    0 bei Projekten)
    nummer char(20) eindeutige Projektnummer

    </pre>

    In der Tabelle werden sowohl Projekte (PreId=0), also auch Positionen (PreId auf die Id des Projektes) gespeichert.<br>
    Ich will doppelte Projektnummern vermeiden, leere Nummer dürfen aber eingegeben werden (schon wegen den Positionen).<br>
    Wie bekomme ich das hin ?<p>
    Die Positionen könnte ich ja noch in den Griff bekommen, indem ich dort deren eigene Id speichere (ist mir gerade eingefallen ).<br>
    Aber leere Projektnummern ?.
    Ohne Umstieg auf Firebird1.5, wo das ja wohl bei den Unique Indizes per Zusatz-Einstellung geht, sehe ich hier nicht.<br>
    Ausser vielleicht ein zuätzliches Feld in der Tabelle, welches sagt, "du bist leer" und dann die Id in der Nummer speichert.
    Das bedeutet für mich aber an einigen Stellen ne Mnege Ändeurngesaufwand.<p>
    Danke im voraus<br>
    Heiko

  • #2
    Hallo Heiko,<BR><BR>
    ich habe Ähnliches immer mit 2 Triggern (BeforeInsert und BeforeUpdate) über eine DB-Exception gelöst.<BR>
    <PRE>
    ...
    if (new.nummer is not null) then
    begin
    select count(*) from projects where nummer=new.nummer into :anz;
    if (anz > 1) then
    exception ...meine_exception;
    end
    ...
    </PRE>
    Fran

    Comment


    • #3
      Hallo Frank,
      <br><br>
      mit solchen benutzerdefinierten Triggern für die Sicherstellung der Konsistenz hat man spätestens dann ein Problem, wenn bei parallel laufenden Transaktionen zumindest eine davon im Isolationlevel SNAPSHOT läuft.
      <br><br>
      @Heiko: Warum schmeißt Du das tote Tier InterBase 6 <b>Open Source</b> nicht aus dem Fenster?
      <br><br>
      Thoma
      Thomas Steinmaurer

      Firebird Foundation Committee Member
      Upscene Productions - Database Tools for Developers
      Mein Blog

      Comment


      • #4
        Hallo Thomas <p>
        weil ich etwa 50 Kunden habe, von denen einige gerade mal den Netzschalter des Rechners finden
        <p>
        Eine Umstellung würde ja einen kompletten Neu-Test der Anwendung bedeuten, selbst wenn ich bei Level1-Datenbanken bleiben würde ;(
        <p>
        Da alle Transaktionen bei mir mit snapshot laufen, ist das oben genannte ja auch eines der Gründe, warum ich die Trigger noch nicht benutze.
        <br>
        Leider fehlt die Zeit.<br>
        Funktionierende (! toi toi) laufende Datenbanken umzustellen will ja keiner bezahlen.
        <p>
        Aber gesetzt den Fall, ich nehme Firebird, wo es ja unique indices gibt, die aber mehrere NULL-Werte erlauben (?), würde denn dann mein Ansatz mit den Speichern der IDs in den Pos-Feldern klappen ?<p>
        Heiko
        <p>
        Als alter Paraodx-Geschädigter bin ich ja froh, das keine Indexfehler mehr auftreten ;

        Comment


        • #5
          Hallo Heiko,
          <br><br>
          &gt; weil ich etwa 50 Kunden habe, von denen einige gerade mal den Netzschalter des Rechners finden.
          <br><br>
          Ich hab mir gedacht, ich probiers bei Dir einfach noch mal. Versprochen, es war das letzte mal. ;-)
          <br><br>
          Warum ist die Tabelle so aufgebaut, wie diese gerade ist? ;-)
          <br><br>
          Normal würde man eine "reguläre" 1:N Beziehung mit 2 Tabellen machen, d.h. zu einem Projekt (1 Tabelle) kann es 0 oder mehr Positionen (1 Tabelle, die über einen FOREIGN KEY die Projekttabelle referenziert) geben. Deine Tabellenstruktur würde meiner Meinung nach nur dann Sinn machen, wenn Du hierarchische Daten darin ablegen möchtest, also wenn z.B. eine Position wiederum Unterpositionen haben kann, usw ...
          <br><br>
          Thoma
          Thomas Steinmaurer

          Firebird Foundation Committee Member
          Upscene Productions - Database Tools for Developers
          Mein Blog

          Comment


          • #6
            Hallo Thomas,<p>
            das war der Plan
            <p>
            Heik

            Comment

            Working...
            X