[MSSQL] mehrere Atribute als eindeutig markieren

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • [MSSQL] mehrere Atribute als eindeutig markieren

    Hallo,

    ich habe ein Problem mit den Datenbank Layout das mich schon länger beschäftigt.

    Mit MySQL ist es möglich ein Feld als Unique zu kenzeichnen. Das heist der zugewiesene Wert darf kein zweites Mal vorkommen.

    Nun mein Problem ist es das ich diese Funktion für zwei Felder brauche. Also Der Wert aus Feld1 darf nicht doppelt vorhanden sein und darf auch nicht in Feld2 vorhanden sein.



    Habe bis jetzt noch nicht einmal im Ansatz etwas gefunden dass ich verwenden kann.

    Es geht darum, dass ich 1:n beziehungen Habe und diese nicht 2mal vorkommen dürfen. Also Tabelle1 verweist auf Tabelle2 (1:N)

    Tabelle3 verweisst ebenfalls auf Tabbelle2 (1:N) darf aber auf keinen Datensatz verweisen, auf den schon Tabelle1 verweist.


    MFG

    Pelikan

    Edit: Ich meinte MySQL und nicht MSSQL
    Zuletzt geändert von pelikan; 24.08.2004, 15:22.

  • #2
    1. ist es nun MS-SQL oder MySQL

    2. Wenn MS-SQL könnte CHECK dir helfen

    Kommentar


    • #3
      muss ich den sinn verstehen?
      Ich denke, also bin ich. - Einige sind trotzdem...

      Kommentar


      • #4
        hi,

        1. gemeint ist MySQL. Das andere war ein fehler beim auswählen.

        2. der Sinn ist. Ich habe eine Tabelle PCs und eine Tabelle Drucker. Außerdem hab ich noch die Tabelle IP in der stehen alle ip adressen die ich im netz zur verfügung hab.

        Nun ich kann IP Adressen an PCs und an drucker verteilen jeweils 1:N ein pc kann mehrere IP Adressen haben

        das problem ist, dass ich wenn ich einen ip adresse an einen PC vergeben habe ich diese nicht nochmal an einen drucker vergeben darf. Deshalb die frage.

        In der IP Tabelle gibt es 2 felder als FKs einmal für PC einmal für Drucker in der jeweils die IDs der verknüpften Tabellen stehen.

        nun müsste man also diese beiden Felder der IP Tabelle als Unique markieren also FK1 darf keinen Wert doppelt und keinen Wert aus FK2 beinhalten.

        Oder löst man so etwas auf eine andere Art?

        Natürlich könnte ich die Tabbellen Drucker und PCs zusammenfassen aber macht das Sinn? Ich hätte dann doch jede menge ungenutzte Felder.

        MFG

        Pelikan

        Kommentar


        • #5
          du könntest eine tabelle device machen und dann die IP-adressen zu den devices speichern

          aber warum machst du nicht einfach die spalte IP unique?
          Ich denke, also bin ich. - Einige sind trotzdem...

          Kommentar


          • #6
            Mache ich eine Tabelle device. So geht die Suche nach IP Adressen nicht. Wenn ich eine bestimmte ip suche, weiss ich ja nicht mit welcher Tabelle diese verknüpft ist. Ob mit PC oder mit Drucker.

            Zum Them Unique. Klar mache ich das so. Aber wenn ich das Feld ip in der PC Tabelle Unique mache. Verhindert das immernoch nicht das ich dieselbe IP in der Tabelle drucker nocheinmal vergebe.

            Ich merke hier ist gewaltig der Wurm drin. Ich bin fast soweit PCs und Drucker in ein und derselben Tabelle aufzunehmen.

            Zum besseren verständnis lade ich mal ein Bild vom E/R Modell hoch

            MFG

            Pelikan
            Angehängte Dateien

            Kommentar


            • #7
              du speicherst die ip doch nur in einer einzigen tabelle (ip)

              wo ist dann das problem wenn du da ein UNIQUE draus machst?
              Ich denke, also bin ich. - Einige sind trotzdem...

              Kommentar


              • #8
                Problem ist, dass ich beiden FKs (pc_id, dru_id) in der Tabelle IP einen Wert zuweisen kann und somit die IP Adresse einmal an einen Drucker und dann nochmal an einen PC vergeben habe.

                Sowas will ich irgentwie verhindern. Es darf also nur einer der beiden FKs einen Wert besitzen der andere muss Null sein.

                MFG

                Pelikan

                Kommentar


                • #9
                  drucker_id: 5
                  pc_id: NULL
                  ip: 192.168.1.25

                  drucker_id: NULL
                  pc_id: 17
                  ip: 192.168.1.26

                  so sieht's aus (beispielhaft)?

                  einen weiteren eintrag:
                  drucker_id: 78
                  pc_id: NULL
                  ip: 192.168.1.26

                  verhinderst du, indem du die spalte ip UNIQUE sein lässt oder nicht?
                  die IP wird nur ein einziges mal vergeben und zwar entweder für einen pc oder für einen drucker

                  wo ist das problem?
                  Ich denke, also bin ich. - Einige sind trotzdem...

                  Kommentar


                  • #10
                    wie bereits gesagt würde ich auch zu einer table device raten und hier die ip-adr. unique machen:

                    IP|DEVICE


                    was ist hierbei das problem..?! der unterschied zwischen drucker und pc kannst du immer noch zb. am namen des devices (prefix?!) herausfinden, etc...


                    zb.:

                    10.191.32.12|pr_hp6990
                    10.191.32.13|pc_u010
                    usw..


                    falls unbedingt erwünscht kannst du aber auch eine zusätzliche spalte einfügen welche das device identifiziert:


                    IP|DEVICE|TYP


                    zb.:

                    10.191.32.12|pr_hp6990|0
                    10.191.32.13|pc_u010|1
                    10.191.32.14|pc_u012|1
                    10.191.32.16|pr_hp7070|0
                    usw..


                    also lösungen für dein problem gibt es zu genüge..

                    Kommentar


                    • #11
                      hmm.. wieder einmal zweiter..

                      Kommentar


                      • #12
                        morgen,

                        bei beiden Beispielen ist mir eins nicht klar. Nun habe ich eine IP Adresse. und möchte wissen welches Gerät sich dahinter verbirgt.

                        Beispiel 10.191.32.12 das ist ein drucker soviel finde ich raus. Jetzt muss ich aber noch die Felder aus der Tabelle Drucker angezeigt bekommen. Wie muss den da der SQL Befel für aussehen. Ich kann ja dabei keine if abfrage einbauen.

                        Oder um es anders zu sagen der JOIN Zusatz muss sich ja dynamisch danach richten ob ip mit drucker oder mit PC verküpft ist.

                        Fragen über Fragen ich hoffe ihr könnt mir helfen

                        Pelikan

                        Kommentar


                        • #13
                          du kannst dir den sticky thread über JOINS anschauen (hier im forum) und merken, dass du mit zwei LEFT JOINs auf jeden fall klar kommst (jeweils von IP-tabelle zu drucker- bzw. pc-tabelle)
                          Ich denke, also bin ich. - Einige sind trotzdem...

                          Kommentar

                          Lädt...
                          X