Initial commit
This commit is contained in:
@@ -0,0 +1,61 @@
|
||||
-- ============================================================================
|
||||
-- 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
|
||||
Reference in New Issue
Block a user