المفتاح الأساسي والمفتاح الخارجي والمفتاح الفريد باستخدام تجمع SQL مخصص في Azure Synapse Analytics
تعرف على القيود على مستوى الجدول في تجمع SQL المخصص، بما في ذلك المفتاح الأساسي والمفتاح الخارجي والمفتاح الفريد.
قيود الجدول
يدعم تجمع SQL المخصص هذه القيود على مستوى الجدول:
- يتم دعم المفتاح الأساسي فقط عند استخدام كل من NONCLUSTERED وNOT ENFORCED.
- لا يتم دعم القيد UNIQUE إلا مع NOT ENFORCED.
لبناء الجملة، تحقق من ALTER TABLE وCREATE TABLE.
قيد المفتاح الخارجي غير مدعوم في تجمع SQL المخصص.
الملاحظات
يسمح وجود المفتاح الأساسي و/أو المفتاح الفريد لمحرك تجمع SQL المخصص بإنشاء خطة تنفيذ مثالية للاستعلام. يجب أن تكون جميع القيم في عمود مفتاح أساسي أو عمود قيد فريد، فريدة.
هام
بعد إنشاء جدول باستخدام مفتاح أساسي أو قيد فريد في تجمع SQL مخصص، يحتاج المستخدمون إلى التأكد من أن جميع القيم في هذه الأعمدة فريدة. قد يؤدي انتهاك هذا الاستعلام إلى إظهار نتيجة غير دقيقة.
يوضح هذا المثال كيف يمكن للاستعلام إرجاع نتيجة غير دقيقة إذا كان المفتاح الأساسي أو عمود القيد الفريد يتضمن قيماً مكررة.
-- Create table t1
CREATE TABLE t1 (a1 INT NOT NULL, b1 INT) WITH (DISTRIBUTION = ROUND_ROBIN)
-- 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 (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 (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)
*/
أمثلة
إنشاء جدول تجمع SQL مخصص باستخدام مفتاح أساسي:
CREATE TABLE mytable (c1 INT PRIMARY KEY NONCLUSTERED NOT ENFORCED, c2 INT);
إنشاء جدول تجمع SQL مخصص باستخدام قيد فريد:
CREATE TABLE t6 (c1 INT UNIQUE NOT ENFORCED, c2 INT);
الخطوات التالية
بعد إنشاء الجداول لتجمع SQL المخصص، فإن الخطوة التالية هي تحميل البيانات في الجدول. للحصول على برنامج تعليمي للتحميل، راجع تحميل البيانات إلى تجمع SQL مخصص.