62 lines
1.9 KiB
Transact-SQL
62 lines
1.9 KiB
Transact-SQL
-- ============================================================================
|
|
-- Fix Customer Email Index for Multi-Tenancy
|
|
-- This allows the same email to exist across different companies
|
|
-- but prevents duplicate emails within the same company
|
|
-- ============================================================================
|
|
|
|
USE PowderCoatingDb
|
|
GO
|
|
|
|
-- Step 1: Check if the old index exists
|
|
IF EXISTS (SELECT * FROM sys.indexes WHERE name = 'IX_Customers_Email' AND object_id = OBJECT_ID('Customers'))
|
|
BEGIN
|
|
PRINT 'Dropping old IX_Customers_Email index...'
|
|
|
|
-- Drop the old unique index that enforces global email uniqueness
|
|
DROP INDEX IX_Customers_Email ON Customers
|
|
|
|
PRINT 'Old index dropped successfully.'
|
|
END
|
|
ELSE
|
|
BEGIN
|
|
PRINT 'Old index IX_Customers_Email not found (may have already been dropped).'
|
|
END
|
|
GO
|
|
|
|
-- Step 2: Create new unique index scoped to CompanyId
|
|
PRINT 'Creating new company-scoped IX_Customers_Email index...'
|
|
|
|
CREATE UNIQUE INDEX IX_Customers_Email
|
|
ON Customers (CompanyId, Email)
|
|
WHERE [Email] IS NOT NULL AND [IsDeleted] = 0
|
|
GO
|
|
|
|
PRINT 'New index created successfully!'
|
|
PRINT ''
|
|
PRINT 'The Customers table now allows:'
|
|
PRINT ' ✓ Same email across different companies'
|
|
PRINT ' ✓ Prevents duplicate emails within the same company'
|
|
PRINT ' ✓ Ignores soft-deleted records'
|
|
GO
|
|
|
|
-- Step 3: Verify the new index
|
|
SELECT
|
|
i.name AS IndexName,
|
|
i.is_unique AS IsUnique,
|
|
STUFF((
|
|
SELECT ', ' + COL_NAME(ic.object_id, ic.column_id)
|
|
FROM sys.index_columns ic
|
|
WHERE ic.object_id = i.object_id AND ic.index_id = i.index_id
|
|
ORDER BY ic.key_ordinal
|
|
FOR XML PATH('')
|
|
), 1, 2, '') AS IndexColumns,
|
|
i.filter_definition AS FilterDefinition
|
|
FROM sys.indexes i
|
|
WHERE i.object_id = OBJECT_ID('Customers')
|
|
AND i.name = 'IX_Customers_Email'
|
|
GO
|
|
|
|
PRINT ''
|
|
PRINT 'Index verification complete. You can now seed customer data!'
|
|
GO
|