Primärschlüssel, Fremdschlüssel und eindeutige Schlüssel in Warehouse in Microsoft Fabric

Gilt für: Warehouse in Microsoft Fabric

Erfahren Sie mehr über Tabelleneinschränkungen in Warehouse in Microsoft Fabric, einschließlich primärer Schlüssel, Fremdschlüssel und eindeutiger Schlüssel.

Wichtig

Verwenden Sie ALTER TABLE, um Primärschlüssel-, Fremdschlüssel- oder Eindeutigkeitseinschränkungen hinzuzufügen oder zu entfernen.

Wichtig

Microsoft Fabric befindet sich in der Vorschauphase.

Tabellenconstraints

Warehouse in Microsoft Fabric unterstützt die folgenden Tabelleneinschränkungen:

  • PRIMARY KEY wird nur unterstützt, wenn sowohl NONCLUSTERED als auch NOT ENFORCED verwendet werden.
  • DIE UNIQUE-Einschränkung wird nur unterstützt, wenn NONCLUSTERED und NOT ENFORCED verwendet werden.
  • FOREIGN KEY wird nur unterstützt, wenn NOT ENFORCED verwendet wird.

Die Syntax finden Sie unter ALTER TABLE.

Bemerkungen

Mit Primärschlüssel, Fremdschlüssel und/oder eindeutigem Schlüssel kann Warehouse in Microsoft Fabric einen optimalen Ausführungsplan für eine Abfrage generieren.

Wichtig

Nach dem Erstellen einer Tabelle mit Primärschlüssel oder eindeutiger Einschränkung in Warehouse in Microsoft Fabric müssen Benutzer sicherstellen, dass alle Werte in diesen Spalten eindeutig sind. Eine Verletzung dieser Bedingung kann dazu führen, dass die Abfrage ungenaue Ergebnisse zurückgibt. Fremdschlüssel werden nicht erzwungen.

Dieses Beispiel zeigt, wie eine Abfrage ungenaue Ergebnisse zurückgeben kann, falls die Hauptschlüsselspalte oder die Spalte mit dem Eindeutig-Contraint doppelte Werte enthält.

 -- Create table t1
CREATE TABLE t1 (a1 INT NOT NULL, b1 INT) 

-- Insert values to table t1 with duplicate values in column a1.
INSERT INTO t1 VALUES (1, 100)
INSERT INTO t1 VALUES (1, 1000)
INSERT INTO t1 VALUES (2, 200)
INSERT INTO t1 VALUES (3, 300)
INSERT INTO t1 VALUES (4, 400)

-- Run this query.  No primary key or unique constraint.  4 rows returned. Correct result.
SELECT a1, COUNT(*) AS total FROM t1 GROUP BY a1

/*
a1          total
----------- -----------
1           2
2           1
3           1
4           1

(4 rows affected)
*/

-- Add unique constraint
ALTER TABLE t1 ADD CONSTRAINT unique_t1_a1 unique NONCLUSTERED (a1) NOT ENFORCED

-- Re-run this query.  5 rows returned.  Incorrect result.
SELECT a1, count(*) AS total FROM t1 GROUP BY a1

/*
a1          total
----------- -----------
2           1
4           1
1           1
3           1
1           1

(5 rows affected)
*/

-- Drop unique constraint.
ALTER TABLE t1 DROP CONSTRAINT unique_t1_a1

-- Add primary key constraint
ALTER TABLE t1 add CONSTRAINT PK_t1_a1 PRIMARY KEY NONCLUSTERED (a1) NOT ENFORCED

-- Re-run this query.  5 rows returned.  Incorrect result.
SELECT a1, COUNT(*) AS total FROM t1 GROUP BY a1

/*
a1          total
----------- -----------
2           1
4           1
1           1
3           1
1           1

(5 rows affected)
*/

-- Manually fix the duplicate values in a1
UPDATE t1 SET a1 = 0 WHERE b1 = 1000

-- Verify no duplicate values in column a1 
SELECT * FROM t1

/*
a1          b1
----------- -----------
2           200
3           300
4           400
0           1000
1           100

(5 rows affected)
*/

-- Add unique constraint
ALTER TABLE t1 ADD CONSTRAINT unique_t1_a1 unique NONCLUSTERED (a1) NOT ENFORCED  

-- Re-run this query.  5 rows returned.  Correct result.
SELECT a1, COUNT(*) as total FROM t1 GROUP BY a1

/*
a1          total
----------- -----------
2           1
3           1
4           1
0           1
1           1

(5 rows affected)
*/

-- Drop unique constraint.
ALTER TABLE t1 DROP CONSTRAINT unique_t1_a1

-- Add primary key contraint
ALTER TABLE t1 ADD CONSTRAINT PK_t1_a1 PRIMARY KEY NONCLUSTERED (a1) NOT ENFORCED

-- Re-run this query.  5 rows returned.  Correct result.
SELECT a1, COUNT(*) AS total FROM t1 GROUP BY a1

/*
a1          total
----------- -----------
2           1
3           1
4           1
0           1
1           1

(5 rows affected)
*/

Beispiele

Erstellen Sie eine Warehouse in Microsoft Fabric-Tabelle mit einem Primärschlüssel:

CREATE TABLE PrimaryKeyTable (c1 INT NOT NULL, c2 INT);

ALTER TABLE PrimaryKeyTable ADD CONSTRAINT PK_PrimaryKeyTable PRIMARY KEY NONCLUSTERED (c1) NOT ENFORCED;

Erstellen Sie eine Warehouse-Tabelle in Microsoft Fabric mit einer eindeutigen Einschränkung:

CREATE TABLE UniqueConstraintTable (c1 INT NOT NULL, c2 INT);

ALTER TABLE UniqueConstraintTable ADD CONSTRAINT UK_UniqueConstraintTablec1 UNIQUE NONCLUSTERED (c1) NOT ENFORCED;

Erstellen Sie eine Warehouse in Microsoft Fabric-Tabelle mit einem Fremdschlüssel:

CREATE TABLE ForeignKeyReferenceTable (c1 INT NOT NULL);

ALTER TABLE ForeignKeyReferenceTable ADD CONSTRAINT PK_ForeignKeyReferenceTable PRIMARY KEY NONCLUSTERED (c1) NOT ENFORCED;

CREATE TABLE ForeignKeyTable (c1 INT NOT NULL, c2 INT);

ALTER TABLE ForeignKeyTable ADD CONSTRAINT FK_ForeignKeyTablec1 FOREIGN KEY (c1) REFERENCES ForeignKeyReferenceTable (c1) NOT ENFORCED;

Nächste Schritte