Announcement

Collapse
No announcement yet.

Hilfe: Insert in Tabelle mit mehreren ForeignKeys

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Hilfe: Insert in Tabelle mit mehreren ForeignKeys

    Hallo,

    ich habe eine Datenbank erstellt und möchte in die Benutzertabelle nun gerne Daten eintragen.

    Die Beziehungen verschiedener Tabellen zueinander ist bewußt gewählt. Nur habe ich mir dadurch selbst das Leben schwer gemacht, weil sobald ein ForeignKey als PrimaryKey in einer anderen Tabelle noch nicht existiert, dieser Datensatz nicht angelegt wird.

    Das Script für die Erstellung der Benutzertabelle siet wie folgt aus:

    CREATE TABLE [dbo].[TABLE_USERS](
    [PRIMARY_KEY] [bigint] IDENTITY(1,1) NOT NULL,
    [FIRST_NAME] [nchar](50) NOT NULL,
    [LAST_NAME] [nchar](50) NOT NULL,
    [COMPANY_FK] [bigint] NOT NULL,
    [LANGUAGE_FK] [bigint] NOT NULL,
    [FIRST_MASK] [bigint] NULL,
    [CREATE_TIMESTAMP] [datetime] NOT NULL,
    [CHANGE_USER_FK] [bigint] NOT NULL,
    [CHANGE_IP] [nchar](15) NOT NULL,
    [CHANGE_SUBNET_MASK] [nchar](15) NOT NULL,
    [CHANGE_GATEWAY] [nchar](15) NOT NULL,
    [CHANGE_TIMESTAMP] [datetime] NOT NULL,
    CONSTRAINT [TABLE_USERS_PK] PRIMARY KEY CLUSTERED
    (
    [PRIMARY_KEY] ASC
    )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
    ) ON [PRIMARY]

    GO
    ALTER TABLE [dbo].[TABLE_USERS] WITH CHECK ADD CONSTRAINT [TABLE_USERS_TABLE_COMPANY_FK] FOREIGN KEY([COMPANY_FK])
    REFERENCES [dbo].[TABLE_COMPANIES] ([PRIMARY_KEY])
    GO
    ALTER TABLE [dbo].[TABLE_USERS] CHECK CONSTRAINT [TABLE_USERS_TABLE_COMPANY_FK]
    GO
    ALTER TABLE [dbo].[TABLE_USERS] WITH CHECK ADD CONSTRAINT [TABLE_USERS_TABLE_LANGUAGE_FK] FOREIGN KEY([LANGUAGE_FK])
    REFERENCES [dbo].[TABLE_LANGUAGES] ([PRIMARY_KEY])
    GO
    ALTER TABLE [dbo].[TABLE_USERS] CHECK CONSTRAINT [TABLE_USERS_TABLE_LANGUAGE_FK]
    GO
    ALTER TABLE [dbo].[TABLE_USERS] WITH CHECK ADD CONSTRAINT [TABLE_USERS_TABLE_USERS_FK] FOREIGN KEY([CHANGE_USER_FK])
    REFERENCES [dbo].[TABLE_USERS] ([PRIMARY_KEY])
    GO
    ALTER TABLE [dbo].[TABLE_USERS] CHECK CONSTRAINT [TABLE_USERS_TABLE_USERS_FK]


    Ich habe herausgefunden, dass es Möglichkeiten in MS SQL 2005 gibt, durch den Einsatz von IGNORE_CONSTRAINTS die ForeignKey-Prüfungen abzuschalten, nur habe ich es damit nicht hinbekommen. Es lag aber eher daran, dass ich kein Datenbank-Profi bin, als dass die Funktionen von MS SQL es nicht schaffen würden.

    Kann mir vielleicht jemand helfen und mitteilen, wie ich in eine Tabelle wie hier im Beispiel einen Datensatz einfüge, obwohl die ForeignKey-Prüfung zum Zeitpunkt der Datensatzerstellung fehlschlägt?

    Ich denke mal, dass mein Konzept noch nicht ausgereift genug ist.
    Außerdem war die Integration solcher Prüfungen dafür gedacht, dass man nicht einfach in der Datenbank einen Datensatz anlegen kann, ohne ordnungsgemäß zu referenzieren.

    Ich verstehe leider nur noch nicht ganz, wie man nun mit der Prüfung umgeht und überhaupt einen Datensatz anlegen kann.


    Vielen Dank schonmal im Voraus.

  • #2
    Man schaltet nicht den constraint ab, um einen ungültigen Datensatz einzufügen. Erstens sollte ja ein constraint gerade sowas verhindern und zweitens kann man nämlich den constraint nicht mehr einschalten, wenn ein ungültiger Datensatz in der tabelle vorhanden ist.
    Dein Problem ist vielleicht, dass du einen User anlegen willst, der zB. keine Company hat. Dann muss aber entweder das Feld Company_FK NULL zulassen (was ich machen würde) oder du hast eine Dummy-Company, die du in solchen Fällen verwendest. Auf jeden Fall muss, wenn das Feld Company_FK im User-Record nicht leer sein darf, vorher eine Company eingetragen werden, bevor man dann dessen ID für die Referenz im User-Datensatz verwenden kann.
    Gilt für alle anderen FK's sinngemäß gleich.

    bye,
    Helmut

    Comment

    Working...
    X