2016-09-07 5 views
1

Ich habe dieses Schema in meiner SQL Server-Datenbank:Muss ich beim Einrichten eines Fremdschlüssels manuell einen Index erstellen?

CREATE TABLE [dbo].[Phrase] 
(
    [PhraseId]  UNIQUEIDENTIFIER DEFAULT (newid()) NOT NULL, 
    [Text]   NVARCHAR (MAX) NOT NULL, 
    [CategoryId] INT    DEFAULT ((1)) NOT NULL, 

    PRIMARY KEY CLUSTERED ([PhraseId] ASC), 

    CONSTRAINT [FK_PhrasePhraseCategory] 
     FOREIGN KEY ([CategoryId]) 
     REFERENCES [dbo].[PhraseCategory] ([PhraseCategoryShortId]) 
); 

CREATE TABLE [dbo].[PhraseCategory] 
(
    [PhraseCategoryId]  UNIQUEIDENTIFIER DEFAULT (newid()) NOT NULL, 
    [PhraseCategoryShortId] INT    IDENTITY (1, 1) NOT NULL, 
    [Name]     VARCHAR (20)  NOT NULL, 

    PRIMARY KEY CLUSTERED ([PhraseCategoryShortId] ASC) 
); 

Bin ich sagen korrigieren, wenn ich an den PhraseCategory Tisch gehen und versuchen, eine Zeile zu löschen, es wird überprüft, um zu sehen, ob die PhraseCategoryShortId in der verwendet wird, Phrasentabelle? Wenn das ein Fall ist, sollte ich dann CategoryId in dieser Tabelle indexieren?

Antwort

2

Ja und ja. Dieser Fremdschlüssel legt eine Einschränkung fest, so dass ein Phrase einen gültigen PhraseCategory haben muss. Wenn eine Kategorie gelöscht wird, wird die PhraseCategory gelöscht, die Phrase Tabelle wird überprüft, um zu bestätigen, dass keine "verwaisten" Phrase s übrig sind. Wenn ein Fremdschlüssel immer auf einen eindeutigen Wert verweisen muss (entweder über eine explizite Integritätsregel oder einen Primärschlüssel), muss das Referenzfeld nicht indexiert sein Achten Sie auf die Durchführung eines Löschvorgangs unter PhraseCategory.

Verwandte Themen