126 lines
3.8 KiB
Transact-SQL
126 lines
3.8 KiB
Transact-SQL
-- ============================================================
|
|
-- 用户系统表结构验证脚本
|
|
-- Feature: database-migration, Property 1: 表结构完整性
|
|
-- Validates: Requirements 1.1, 1.2, 1.3, 1.4
|
|
-- ============================================================
|
|
|
|
USE honey_box;
|
|
GO
|
|
|
|
PRINT '========================================';
|
|
PRINT '用户系统表结构验证报告';
|
|
PRINT '========================================';
|
|
PRINT '';
|
|
|
|
-- 1. 验证所有用户系统表是否存在
|
|
PRINT '1. 表存在性验证';
|
|
PRINT '----------------------------------------';
|
|
|
|
DECLARE @expected_tables TABLE (table_name NVARCHAR(50));
|
|
INSERT INTO @expected_tables VALUES ('users'), ('user_accounts'), ('user_login_logs'), ('user_addresses');
|
|
|
|
SELECT
|
|
e.table_name AS [预期表名],
|
|
CASE WHEN t.TABLE_NAME IS NOT NULL THEN '✓ 存在' ELSE '✗ 不存在' END AS [状态]
|
|
FROM @expected_tables e
|
|
LEFT JOIN INFORMATION_SCHEMA.TABLES t
|
|
ON t.TABLE_NAME = e.table_name
|
|
AND t.TABLE_TYPE = 'BASE TABLE';
|
|
|
|
-- 2. 验证每个表的字段数量
|
|
PRINT '';
|
|
PRINT '2. 字段数量验证';
|
|
PRINT '----------------------------------------';
|
|
|
|
SELECT
|
|
TABLE_NAME AS [表名],
|
|
COUNT(*) AS [字段数量]
|
|
FROM INFORMATION_SCHEMA.COLUMNS
|
|
WHERE TABLE_NAME IN ('users', 'user_accounts', 'user_login_logs', 'user_addresses')
|
|
GROUP BY TABLE_NAME
|
|
ORDER BY TABLE_NAME;
|
|
|
|
-- 3. 验证主键约束
|
|
PRINT '';
|
|
PRINT '3. 主键约束验证';
|
|
PRINT '----------------------------------------';
|
|
|
|
SELECT
|
|
tc.TABLE_NAME AS [表名],
|
|
tc.CONSTRAINT_NAME AS [约束名称],
|
|
'✓ 已创建' AS [状态]
|
|
FROM INFORMATION_SCHEMA.TABLE_CONSTRAINTS tc
|
|
WHERE tc.TABLE_NAME IN ('users', 'user_accounts', 'user_login_logs', 'user_addresses')
|
|
AND tc.CONSTRAINT_TYPE = 'PRIMARY KEY';
|
|
|
|
-- 4. 验证唯一约束 (users表)
|
|
PRINT '';
|
|
PRINT '4. 唯一约束验证 (users表)';
|
|
PRINT '----------------------------------------';
|
|
|
|
SELECT
|
|
tc.TABLE_NAME AS [表名],
|
|
tc.CONSTRAINT_NAME AS [约束名称],
|
|
'✓ 已创建' AS [状态]
|
|
FROM INFORMATION_SCHEMA.TABLE_CONSTRAINTS tc
|
|
WHERE tc.TABLE_NAME = 'users'
|
|
AND tc.CONSTRAINT_TYPE = 'UNIQUE';
|
|
|
|
-- 5. 验证索引
|
|
PRINT '';
|
|
PRINT '5. 索引验证';
|
|
PRINT '----------------------------------------';
|
|
|
|
SELECT
|
|
t.name AS [表名],
|
|
i.name AS [索引名称],
|
|
i.type_desc AS [索引类型]
|
|
FROM sys.indexes i
|
|
INNER JOIN sys.tables t ON i.object_id = t.object_id
|
|
WHERE t.name IN ('users', 'user_accounts', 'user_login_logs', 'user_addresses')
|
|
AND i.name IS NOT NULL
|
|
ORDER BY t.name, i.name;
|
|
|
|
-- 6. 验证表注释
|
|
PRINT '';
|
|
PRINT '6. 表注释验证';
|
|
PRINT '----------------------------------------';
|
|
|
|
SELECT
|
|
t.name AS [表名],
|
|
CAST(ep.value AS NVARCHAR(200)) AS [表描述],
|
|
CASE WHEN ep.value IS NOT NULL THEN '✓ 已添加' ELSE '✗ 未添加' END AS [状态]
|
|
FROM sys.tables t
|
|
LEFT JOIN sys.extended_properties ep
|
|
ON ep.major_id = t.object_id
|
|
AND ep.minor_id = 0
|
|
AND ep.name = 'MS_Description'
|
|
WHERE t.name IN ('users', 'user_accounts', 'user_login_logs', 'user_addresses')
|
|
ORDER BY t.name;
|
|
|
|
-- 7. 验证字段注释数量
|
|
PRINT '';
|
|
PRINT '7. 字段注释验证';
|
|
PRINT '----------------------------------------';
|
|
|
|
SELECT
|
|
t.name AS [表名],
|
|
COUNT(c.column_id) AS [总字段数],
|
|
COUNT(ep.value) AS [已注释字段数],
|
|
CASE WHEN COUNT(c.column_id) = COUNT(ep.value) THEN '✓ 完整' ELSE '⚠ 部分缺失' END AS [状态]
|
|
FROM sys.tables t
|
|
INNER JOIN sys.columns c ON t.object_id = c.object_id
|
|
LEFT JOIN sys.extended_properties ep
|
|
ON ep.major_id = c.object_id
|
|
AND ep.minor_id = c.column_id
|
|
AND ep.name = 'MS_Description'
|
|
WHERE t.name IN ('users', 'user_accounts', 'user_login_logs', 'user_addresses')
|
|
GROUP BY t.name
|
|
ORDER BY t.name;
|
|
|
|
PRINT '';
|
|
PRINT '========================================';
|
|
PRINT '验证完成';
|
|
PRINT '========================================';
|
|
GO
|