Ludger: Frage zum DB-Design

Beitrag lesen

Hi,

Aber Unique-Indizes über mehrere Spalten werden wohl zulässig sein? Die kann man auch ganz normal benutzen ohne das sie implizit durch einen Primärschlüssel erstellt werden.

interessanter Ansatz Indizes fuer Einstellungen auf Datensatzebene zu nutzen.

Ich habe mal mit M$ SQL Server folgende Tabelle (incl. PK einem Defaultwert und dem von Dir vorgeschlagenenen Index) erstellt:

-- die Test-Tabelle
CREATE TABLE [dbo].[Tests] (
 [Test_GUID] [uniqueidentifier] NOT NULL ,
 [Test_GUID_1] [uniqueidentifier] NOT NULL ,
 [Test_GUID_2] [uniqueidentifier] NOT NULL
) ON [PRIMARY]
GO

-- der PK
ALTER TABLE [dbo].[Tests] WITH NOCHECK ADD
 CONSTRAINT [PK_Tests] PRIMARY KEY  CLUSTERED
 (
  [Test_GUID]
 )  ON [PRIMARY]
GO

-- der Defaultwert fuer den PK und der kombinierte unique Index
ALTER TABLE [dbo].[Tests] WITH NOCHECK ADD
 CONSTRAINT [DF_Tests_Test_GUID] DEFAULT (newid()) FOR [Test_GUID],
 CONSTRAINT [IX_Tests] UNIQUE  NONCLUSTERED
 (
  [Test_GUID_1],
  [Test_GUID_2]
 )  ON [PRIMARY]
GO

Dann fuehrt beispielsweise ein wiederholtes
 insert
  tests
  (
  Test_GUID,
  test_guid_1,
  test_guid_2
  )
 values
  (
  newid(),
  '{137477E5-1591-4279-9962-4E20E25E2EAA}',
  '{CBC12F5B-A556-462D-8B7F-1F6DC29DFE8F}'
  )
zur Fehlermeldung:
Server: Nachr.-Nr. 2627, Schweregrad 14, Status 2, Zeile 1
Verletzung der UNIQUE KEY-Einschränkung 'IX_Tests'. Ein doppelter Schlüssel kann in das Tests-Objekt nicht eingefügt werden.
Die Anweisung wurde beendet.

Ist das ueblich Indizes auf diese Art und Weise zu nutzen? Ist das OK es zu tun?

Gruss,
Ludger