Beziehungsdrama: NULL im Schlüssel



  • Hallo,

    Tabelle Ereignis:
    Infos über ein Ereignis (Datum, Ort, Beschreibung, etc.)

    Tabelle Person:
    Alle Personen, die in ein Ereignis verwickelt sein können

    Tabelle Material:
    Alle Dinge, die an einem Ereignis beteiligt sein können

    Tabelle EreignisZuordnung:
    Ordnet einem Ereignis Personen und Material zu

    Normal macht man dann doch
    Ereigins_id, Person_id, Material_id
    zum Primärschlüssel in EreignisZuordnung.

    Dummerweise gibt's aber Ereignisse, bei denen nur Personen, aber keine Materialien vorhanden sind.
    Was macht man dann mit der Material_id?

    -> NULL setzten geht ned, da Schlüssel.
    -> Dummy in Material ist unschön.
    -> Den dreien den Schlüsselstatus aberkennen und eine normale Zähler-ID in die Tabelle einbauen?

    Oder ganz was anderes?

    thx
    Martin



  • Ich würde auf die referentielle Integrität zwischen den Tabellen verzichteten. Dann kann man, wenn kein Material zugeordnet ist, in den Schlüssel 0 (nicht NULL, die Zahl 0) reinschreiben, ohne das man einen Dummysatz bräuchte.

    Die Integrität stelle ich auf Anwendungsebene sicher, ist meistens praktikabler und vor allem flexibler.



  • Vorausgesetzt, es gibt keine Material Id = 0, kannst Du doch 0 dort angeben. NOT NULL bedeutet, dass ein Wert angegeben werden muß. 0 ist ein Wert.



  • Andere Idee:
    Vielleicht machen auch zwei Verknüpfungstabellen Sinn?
    1. Ereigins_id, Person_id,
    2. Ereigins_id, Material_id

    Kommt auf die Aufgabenstellung an.



  • Joe_M. schrieb:

    Vorausgesetzt, es gibt keine Material Id = 0, kannst Du doch 0 dort angeben. NOT NULL bedeutet, dass ein Wert angegeben werden muß. 0 ist ein Wert.

    Fincki|work schrieb:

    Andere Idee:
    Vielleicht machen auch zwei Verknüpfungstabellen Sinn?
    1. Ereigins_id, Person_id,
    2. Ereigins_id, Material_id

    letzteres gefällt mir besser, aber das obere lässt sich schneller umsetzen.

    Da werd ich mal in mich gehen müssen...

    Danke


Anmelden zum Antworten