![]() |
Datenbank: MS SQL Server Express • Zugriff über: ADO
Relationale DB anlegen & mit Daten füllen, SQL Skript
Hi,
ich habe per Skript zwei Tabellen erstellt. Diese sind miteinander verknüpft. Nun möchte ich mit dem SQl Skript gleich nach dem Anlegen der Tabellen einige Daten in die DB mittels Insert Befehls aufnehmen.
SQL-Code:
Die User befinden sich in einem Team, daher ist die Tabelle mit der Team Tabelle vernüpft. Sind die Datensätze automatisch verknüpft wenn ich als "FK_TeamID" die TeamID des jeweiligen Teams mitgebe?
CREATE TABLE "TB_Teams"
( "TeamID" INT IDENTITY(1,1) NOT NULL PRIMARY KEY, "Name" VARCHAR(50), "Leader" VARCHAR(50), "Description" VARCHAR(50), ); CREATE TABLE "TB_Users" ( "UserID" INT IDENTITY(1,1) NOT NULL PRIMARY KEY, "LoginName" VARCHAR(50), "FirstName" VARCHAR(50), "LastName" VARCHAR(50), "Phone" VARCHAR(50), "EMail" VARCHAR(50), "Password" VARCHAR(50), "FK_TeamID" INT, FOREIGN KEY(FK_TeamID) REFERENCES TB_Teams(TeamID), ); Das erste Team -> Team1 bekommt durch das autoincrement automatisch die TeamID1. Befindet sich der folgende User dann im Team 1 wenn ich ihn wie folgt anlege. Das ganze ist ehr eine Verständisfrage...
SQL-Code:
MfG
INSERT INTO TB_User("LoginName", "FirstName", "LastName", .... "FK_TeamID")
VALUES ('LoginName','Max', 'Mustermann' ... '1'); Marcus |
Re: Relationale DB anlegen & mit Daten füllen, SQL Skrip
Was meinst du mit automatisch? Die Verknüpfung ist ja nur logisch durch den wert des FKs. Das FOREIGN KEY im CREATE-Statement weißt den Server ja nur an, zu überprüfen, ob der wert in der anderen Tabelle überhaupt existiert.
|
Re: Relationale DB anlegen & mit Daten füllen, SQL Skrip
Das heißt also wenn das FK_TeamID Feld der User Tabelle und das TeamID Feld der Teams Tabelle den selben Wert haben sind die Datensätze miteinander verknüpft?
|
Re: Relationale DB anlegen & mit Daten füllen, SQL Skrip
Ja, das ist das Prinzip von relationalen Datenbanken.
|
Re: Relationale DB anlegen & mit Daten füllen, SQL Skrip
Wußte ich doch das ich das soweit verstanden habe ;)
Im Programm werde ich dann mit DBLookup Komponenten arbeiten, um z.B. bei einem User anzuzeigen in welchem Team er ist? Das Anzeigen der Team ID macht ja nicht so viel Sinn... |
Re: Relationale DB anlegen & mit Daten füllen, SQL Skrip
Du kannst ja in der Abfrage den Namen des Teams hinzujoinen.
|
Re: Relationale DB anlegen & mit Daten füllen, SQL Skrip
Du meinst sowas wie:
SQL-Code:
?
SELECT TB_Users.FirstName, TB_Users.LastName, TB_Teams.Name
FROM TB_Users, TB_Teams WHERE TB_Users.FK_TeamID = TB_Teams.TeamID Mit dem Code in einer ADOQuery Komponente sollten man meine ich einen User mit dem Team zu dem er gehört anzeigen können... |
Re: Relationale DB anlegen & mit Daten füllen, SQL Skrip
Hi,
SQL-Code:
Mal abgesehen davon, das die TeamID eigendlich ein Integer ist und das Insert nur durch "Server-Magic" (autom. Konvertierung) funktioniert:
INSERT INTO TB_User("LoginName", "FirstName", "LastName", .... "FK_TeamID")
VALUES ('LoginName','Max', 'Mustermann' ... '1'); Auf die "1" als ID für das erste eingefügte Team kann man sich nur verlassen, wenn die Tabelle gerade angelegt wurde. Wurden bereits andere Team-Datensätze eingefügt und dann wieder gelöscht, wird - auch bei leerer Tabelle - das nächste eingefügte Team *nicht* die ID=1 bekommen!
SQL-Code:
...liefert für das Team XYZ immer die richtige TeamID.
INSERT INTO TB_User("LoginName", "FirstName", "LastName", .... "FK_TeamID")
SELECT 'LoginName', 'Max', 'Mustermann' ... , t.TeamID FROM TB_Teams t where Name = 'XYZ' Dabei sollte natürlich TB_Teams.Name eindeutig sein (evtl. mit unique key). |
Alle Zeitangaben in WEZ +1. Es ist jetzt 23:19 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz