چه نوع طراحی برای جدول Status پیشنهاد میکنید؟
نویسنده: هادی مزارعی
تاریخ: ۱۴۰۵/۰۳/۰۹ ۰۶:۰۶
آدرس: www.dntips.ir
select Parts.*, A.Column1, A.Column2, A.Column3 from Parts left join (select top 1 * from operationA where Id = Parts.Id order by CreateDateTime desc) as A on Parts.Id = A.PartId
CREATE TABLE PartStatus (
PartId BIGINT PRIMARY KEY,
-- اطلاعات اصلی قطعه
PartNumber NVARCHAR(50),
PartName NVARCHAR(200),
Status NVARCHAR(50), -- وضعیت کلی قطعه
CurrentStage NVARCHAR(100),
LastUpdateDate DATETIME2,
-- ستونهای پراستفاده از عملیاتها (حدود ۳ ستون مهم از هر عملیات)
OpA_Result NVARCHAR(100),
OpA_Date DATETIME2,
OpA_Value DECIMAL(18,4),
OpB_Result NVARCHAR(100),
OpB_Date DATETIME2,
OpB_Value DECIMAL(18,4),
-- ... همینطور برای عملیاتهای مهم
-- اگر تعداد عملیات خیلی زیاد بود، از JSON استفاده کنید (SQL Server 2016+)
-- ExtraData NVARCHAR(MAX) -- JSON برای عملیاتهای کماهمیت
);select Parts.*, A.Column1
from Parts
left join (
select top 1 *
from OperationA
order by CreateDateTime desc
) ASELECT
P.*,
A.Column1
FROM Parts P
OUTER APPLY
(
SELECT TOP 1 *
FROM OperationA O
WHERE O.PartId = P.Id
ORDER BY O.CreateDateTime DESC
) ACREATE TABLE PartStatus (
PartId BIGINT PRIMARY KEY,
-- اطلاعات پایه قطعه
PartNumber NVARCHAR(50),
CurrentStage NVARCHAR(100),
OverallStatus NVARCHAR(50),
LastActivityDate DATETIME2,
-- ذخیره فقط شناسه آخرین رکورد هر عملیات
OpA_LatestId BIGINT NULL, -- FK به جدول OperationA
OpB_LatestId BIGINT NULL,
OpC_LatestId BIGINT NULL,
-- ... تا ۲۵-۳۰ عملیات
);SELECT
p.*,
A.Column1, A.Column2, A.Column3,
B.Column1, B.Column2, B.Column3,
...
FROM PartStatus ps
JOIN Parts p ON p.Id = ps.PartId
LEFT JOIN OperationA A ON A.Id = ps.OpA_LatestId
LEFT JOIN OperationB B ON B.Id = ps.OpB_LatestId
-- و بقیه عملیاتها