Benutzer mit den meisten Antworten
Voraussetzungen für 1:n Beziehung zwischen Tabellen in SQL Database

Frage
-
Hallo,
ich versuche über das Azure Verwaltungsportal eine 1:n Beziehung zwischen 2 Tabellen (Betriebe und Mitarbeiter) in einer Azure SQL Datenbank herzustellen. In der Tabelle 'Betriebe' habe ich ein Feld mit der Bezeichnung 'ID' (Integer, primary key), in der Tabelle 'Mitarbeiter' habe ich ein Feld mit der Bezeichnung 'Nr' (Integer). Ich lege nun mithilfe der grafischen Oberfläche des Portals für die Tabelle 'Betriebe' eine neue Fremdschlüsselbeziehung an, wähle dazu das ID Feld als Fremdschlüsselfeld, dann im Popup-Fenster die Verweistabelle 'Mitarbeiter', bekommen dann zur Auswahl für die Verweisspalte aber nur das Primärschlüsselfeld der Tabelle zur Auswahl angezeigt und nicht jenes Feld (Nr) über das ich die 1:n Beziehung herstellen möchte. Das Feld 'Nr' lässt sich nicht eingeben. Gibt es außer, dass die in Beziehung stehenden Felder gleicher Art sein müssen und das Schlüsselfeld in der Tabelle 'Betriebe' ein Primärschlüssel sein muss, noch andere Bedingungen, die ich übersehen habe?
LG
Manfred
Antworten
-
Danke. Ich hab's herausgefunden. Eine 1:n Beziehung von Betriebe auf Mitarbeiter muss man auf der grafischen Oberfläche vom Azure Portal von der Mitarbeiter-Seite einrichten. Also in den Entwurf der 'Mitarbeiter' Tabelle gehen und dort vom Feld 'Nr' zur Tabelle 'Betriebe' aufs Feld 'ID' die Beziehung einrichten. Dann geht's.
Danke jedenfalls für eure Tipps.
LG
Manfred
- Als Antwort markiert Elmar BoyeEditor Donnerstag, 24. Oktober 2013 19:24
Alle Antworten
-
In der Tabelle 'Betriebe' habe ich ein Feld mit der Bezeichnung 'ID' (Integer, primary key), in der Tabelle 'Mitarbeiter' habe ich ein Feld mit der Bezeichnung 'Nr' (Integer). Ich lege nun mithilfe der grafischen Oberfläche des Portals für die Tabelle 'Betriebe' eine neue Fremdschlüsselbeziehung an, wähle dazu das ID Feld als Fremdschlüsselfeld
Hallo Manfred,
ID ist doch der PrimaryKey von "Betriebe", dann solltest Du es auch als "Primärschlüsselfeld", "Nr" in "Mitarbeiter" ist dann das Fremdschlüsselfeld.
Olaf Helper
[ Blog] [ Xing] [ MVP] -
Wenn ich hier im Text nichts verwechselt habe, sollte das alles sein.
Die Oberfläche von Azure ist mir leider nicht so geläufig. Schon mal per ALTER TABLE versucht? Dann bekommt man bestimmt eine schöne, hilfreiche, Fehlermeldung.
Ein Tipp noch: Wenn jemals jemand anderes diese Datenbank untersuchen/programmieren soll, würde derjenige sich bestimmt freuen, wenn Verweisspalten leicht zu erkennen sind.
Also Nicht Nr -> ID
Sondern vielleicht eher soetwas wie:
ID_Betrieb -> ID_Betrieb
nur ein Tipp..
Andreas Wolter | Microsoft Certified Master SQL Server
Blog: www.insidesql.org/blogs/andreaswolter
Web: www.andreas-wolter.com | www.SarpedonQualityLab.com -
In der Tabelle 'Betriebe' habe ich ein Feld mit der Bezeichnung 'ID' (Integer, primary key), in der Tabelle 'Mitarbeiter' habe ich ein Feld mit der Bezeichnung 'Nr' (Integer). Ich lege nun mithilfe der grafischen Oberfläche des Portals für die Tabelle 'Betriebe' eine neue Fremdschlüsselbeziehung an, wähle dazu das ID Feld als Fremdschlüsselfeld
Hallo Manfred,
ID ist doch der PrimaryKey von "Betriebe", dann solltest Du es auch als "Primärschlüsselfeld", "Nr" in "Mitarbeiter" ist dann das Fremdschlüsselfeld.
...
Aber am Ende entschied ich, das ich es wohl falsch lese :-DAndreas Wolter | Microsoft Certified Master SQL Server
Blog: www.insidesql.org/blogs/andreaswolter
Web: www.andreas-wolter.com | www.SarpedonQualityLab.com -
Danke. Ich hab's herausgefunden. Eine 1:n Beziehung von Betriebe auf Mitarbeiter muss man auf der grafischen Oberfläche vom Azure Portal von der Mitarbeiter-Seite einrichten. Also in den Entwurf der 'Mitarbeiter' Tabelle gehen und dort vom Feld 'Nr' zur Tabelle 'Betriebe' aufs Feld 'ID' die Beziehung einrichten. Dann geht's.
Danke jedenfalls für eure Tipps.
LG
Manfred
- Als Antwort markiert Elmar BoyeEditor Donnerstag, 24. Oktober 2013 19:24
-
Hallo Manfred,
schön, dass Du es heraus gefunden hast.
Als Hinweis: Fremdschlüsseleinschränkungen werden immer auf der rechten (N)-Seite (Mitarbeiter) angelegt. Denn der Fremdschlüssel gehört logisch zu dieser Tabelle => würde sie gelöscht, gäbe es auch keinen Grund mehr für die Einschränkung, wohingegen die referenzierte Tabelle davon unberührt bleibt.
In SQL ginge es im übrigen so:
CREATE TABLE Betrieb ( BetriebID int NOT NULL, CONSTRAINT PK_Betrieb PRIMARY KEY (BetriebID)); CREATE TABLE Mitarbeiter ( MitarbeiterID int NOT NULL, BetriebID int NOT NULL, CONSTRAINT PK_Mitarbeiter PRIMARY KEY (MitarbeiterID), CONSTRAINT FK_Mitarbeiter_Betrieb FOREIGN KEY (BetriebID) REFERENCES Betrieb (BetriebID));
bzw. im Nachhinein über ALTER TABLE:
ALTER TABLE Mitarbeiter WITH CHECK ADD CONSTRAINT FK_Mitarbeiter_Betrieb FOREIGN KEY (BetriebID) REFERENCES Betrieb(BetriebID);
(und mit etwas Übung braucht es weniger Geklicke als im SSMS und vermutlich macht es Azure auch nicht anderes/besser ;)
Gruß Elmar
-
Hallo Elmar,
Danke für die Hilfe.
Jetzt habe ich gleich noch eine Frage: Wie wird mit SQL festgelegt, ob Löschungen von Datensätzen in der Tabelle 'Betriebe' auch an die Tabelle 'Mitarbeiter' weitergegeben werden sollen bzw. nicht weitergegeben werden sollen?
LG
Manfred
-
Hallo Manfred,
Änderungs- und Löschweitergaben kannst Du über Optionen angeben, siehe ALTER TABLE (entsprechend auch bei CREATE TABLE), z. B.:
ALTER TABLE Mitarbeiter WITH CHECK ADD CONSTRAINT FK_Mitarbeiter_Betrieb FOREIGN KEY (BetriebID) REFERENCES Betrieb(BetriebID) ON UPDATE CASCADE ON DELETE CASCADE;
richtet eine Änderungs- und Löschweitergabe ein. Standard ist NO ACTION, d.h. es wird ein Fehler erzeugt, wenn noch ein Mitarbeiter für den Betrieb existiert.
Gruß Elmar