Laden...

Problem bei Constraint-Erstellung

Erstellt von ravel vor 12 Jahren Letzter Beitrag vor 12 Jahren 1.642 Views
R
ravel Themenstarter:in
169 Beiträge seit 2007
vor 12 Jahren
Problem bei Constraint-Erstellung

verwendetes Datenbanksystem: MS SQL 2008 R2 Express

Hi,

ich versuche grade vergeblich ein foreign key constraint zu erstellen, bekomme aber immer eine Fehlermeldung (siehe Screenshot).

Beide Spalten haben den gleichen Datentyp und in beiden Tabellen haben die benutzten Spalten die gleichen Werte. Also in fk_user_id stehen die gleichen Werte wie in ProviderUserKey.

Ist es ein Problem, dass die Tabelle bereits Daten enthalten? Ich kann die Tabellen schlecht leeren um das auszuprobieren, weil auf der yaf_User-Tabelle wiederum constraints sitzen die mir das Löschen verweigern.

Was mache ich falsch?

C
2.122 Beiträge seit 2010
vor 12 Jahren

Der Schlüssel in der Primärtabelle muss ein eindeutiger Wert sein und es muss auch tatsächlich ein Index auf ihm sein. Du hast NULL erlaubt, das sieht schon mal nicht aus als wäre dieser Wert eindeutig.
Warum arbeitest du nicht mit der "id"? Die würde ja den gleichen Zweck erfüllen und wär bestimmt schneller zum joinen.

1.552 Beiträge seit 2010
vor 12 Jahren

Hallo ravel,

an sich wäre es ja kein Problem dass deine ProviderUserKey ALLOW NULL hat, jedoch wenn diese Spalte nicht UNIQUE gemacht wurde, ist es nicht möglich einen FK darauf zu machen. Ich immer auf den PK der Tabelle, welcher auch Sicherstellt dass die Spalte UNIQUE ist. Ich habe es mir so angewöhnt, dass ich den PK für die Id benutze und den UNIQUE-Konstraint für Tabelleninhaltliche Eindeutigkeiten.

Gruß
Michael

Mein Blog
Meine WPF-Druckbibliothek: auf Wordpress, myCSharp

R
ravel Themenstarter:in
169 Beiträge seit 2007
vor 12 Jahren

Hallo ihr beiden.
Danke für die Anworten. Das leuchtet ein.

O
461 Beiträge seit 2009
vor 12 Jahren
ForeignKey

Hallo, habe auch so ein Problem. Ich habe ein DataSet mit 20 Tabellen.
Die erste Tabelle (Tabelle 0) "kann" eine 1:N Beziehung ju jeder ander Tabelle haben (Tabelle 1 - 20).
Nun möchte ich eine DataRelation und genauso ein ForeignKey erstellen.

Die DataRelation soll erstmal das Zusammengehören von Tabelle 0 zu jeder anderen bestimmen.
Der ForeignKey soll Rule.Delete auf "Cascade" setzen, damit alle Datensätze in Tabelle 1 - Tabelle 20 gelöscht werden sobald ein Datensatz in Tabelle 0 gelöscht wird.

Beim anlegen der DataRelation


DataColumn parentCol = Form1._dsSqlTabellen.Tables[0].Columns["Dateiname"];
            DataColumn childCol = Form1._dsSqlTabellen.Tables[1].Columns["Bezeichnung"];

            Form1._dsSqlTabellen.Relations.Add("Rel01", parentCol, childCol, true);

bekomme ich sofort die Fehlermeldung: "This constraint cannot be enabled as not all values have corresponding parent values"

Dieser Fehler tritt schon bei der ersten Relation von Tabelle 0 zu Tabelle 1 auf. Es ist aber auch so, das von Tabelle 0 nicht in jeder der anderen Tabelle ein Bezug besteht. Das heiß also ein Datensatz in Tabelle 0 hat evtl. erst einen Partner in Tabell 5 oder tabelle 10. Kann das ein Grund für die Meldung sein?

Ich habe gerade noch etwas festgestellt. Ich lese ja uas einer SQL-Datenbank die Daten in das DataSet. Es besteht aber keine Relations. Wenn ich das DataSet klone, kann ich die Relations und ForeignKeys erzeugen. Also hängt es dasmit zusammen, das es zu jedem Parent-Datensatz eine N-Zahl von Child-Datensätze geben muss. Kann ich das irgendwie deaktivieren, damit die Parent-Child- Beziehung trotzdem wirkt, obwohl es keinen Child-Datensatz zum Parent-Datensatz gibt?

Wer hat eine Idee?

16.840 Beiträge seit 2008
vor 12 Jahren

ravel, wenn ich Dein Datenbankmodell sehe, so tu Dir und dem Datenschutz Deiner potenziellen Nutzern bitte einen gefallen: Passwörter speichern - aber richtig!
Im Allgemeinen: Salt (Kryptologie)

O
461 Beiträge seit 2009
vor 12 Jahren
Neuere Erkenntnis

Ich habe gerade noch etwas festgestellt. Ich lese ja uas einer SQL-Datenbank die Daten in das DataSet. Es besteht aber keine Relations. Wenn ich das DataSet klone, kann ich die Relations und ForeignKeys erzeugen. Also hängt es dasmit zusammen, das es zu jedem Parent-Datensatz eine N-Zahl von Child-Datensätze geben muss. Kann ich das irgendwie deaktivieren, damit die Parent-Child- Beziehung trotzdem wirkt, obwohl es keinen Child-Datensatz zum Parent-Datensatz gibt?

Wer hat eine Idee?

C
2.122 Beiträge seit 2010
vor 12 Jahren

Zum Parent muss es kein Child geben. Aber andersrum und das lässt sich auch nicht verhindern, wenn man eine Relation haben will.
Genau das ist ja der Sinn der Relation, dass ein Datensatz mit gesetztem Fremdschlüssel immer einen Parent haben muss, außer natürlich der Wert ist NULL.
Falls ich deine Frage richtig verstehe...