S8 — สิ่งที่ต่างจากระบบเดิม (Changes vs Current)
เทียบอะไรกับอะไร
ปัจจุบัน = legacy RLPD_WEB @ 10.136.27.226 (81 ตาราง, 0 FK) → เป้าหมาย = schema WEB บน PSDBPRDDB
· ดูรายละเอียด: schema.sql · Data Dictionary · Implementation
· ทั้งหมดเป็น target design — ยังไม่ใช่ของจริงใน DB
ภาพรวม
- จาก 81 ตาราง / 0 FK (มีตารางขยะ/ซ้ำเยอะ) → 46 ตาราง / FK ครบ + audit/soft-delete/workflow มาตรฐาน
- เปลี่ยน auth จาก local username/password → Keycloak SSO (ThaiD/AD)
- ย้าย authorization ไปรวมศูนย์ที่ Portal + Keycloak (S8 ไม่เก็บ role เอง)
🆕 เพิ่มใหม่ (ไม่มีใน legacy)
| ตาราง/สิ่งที่เพิ่ม |
ทำไม |
อ้างอิง |
MediaVariant |
เก็บรูปย่อขนาดอัตโนมัติ (original + renditions ต่อ section) |
REQ-WEB-003 |
ContentRevision |
workflow แก้/อนุมัติ (EDITOR→APPROVER) + เก็บทุกเวอร์ชัน |
REQ-WEB-003 |
EmbedCode + EmbedCodeAudit |
จัดการ embed รายตำแหน่ง (Header/Footer/Section) + audit (เดิมเป็นแค่คอลัมน์ Embed_Code) |
REQ-WEB-004 |
ApiClient + ApiClientScope + ApiAccessLog |
Web API ข่าวสาร/บทความ (API key/OAuth, rate limit, audit) |
REQ-WEB-007 |
SearchLog |
ประวัติค้นหา (article + internal) |
REQ-WEB-005/006 |
AccessibilityIssue |
ทะเบียน WCAG Known-Issues + Accessibility Statement |
REQ-WEB-001 |
คอลัมน์ User.KeycloakUserId |
ผูกตัวตนกับ Keycloak SSO |
Decision D8 |
✏️ เปลี่ยน / ปรับ
| เดิม |
ใหม่ |
ความต่าง |
อ้างอิง |
Content (ไม่มี workflow) |
Content + Status |
เพิ่มสถานะ DRAFT→PENDING→APPROVED→PUBLISHED |
REQ-WEB-003 |
Content_Article.HtmlContent (ntext) |
ContentArticle.HtmlContent (nvarchar max) |
รองรับเนื้อหา ≥1MB + HTML code mode |
REQ-WEB-003 |
Users (password + lockout) |
User (SSO profile) |
เลิกเก็บ password/lockout → Keycloak; เพิ่ม KeycloakUserId |
D8 / SSO |
Role_Menu.Role_ID (FK ในเครื่อง) |
RoleMenu.RoleCode |
ชี้ไป central role (PORTAL.ModuleRoles) ไม่ใช่ role ท้องถิ่น |
REQ-WPT-005 |
Tm_Menu |
AdminMenu |
จัดโครงใหม่ (เมนูหลังบ้าน + เป้า Internal Search) |
REQ-WEB-006 |
| ทุกตาราง: 0 FK |
FK ครบ |
referential integrity ที่ legacy ไม่มี |
D3 |
| PK ปนกัน |
uniqueidentifier + audit/soft-delete มาตรฐาน |
สม่ำเสมอทั้ง schema |
D6/D7 |
❌ เอาออก / ย้าย
| เดิม |
ผลลัพธ์ |
เหตุผล |
Content++, Content_copy1, Content_Article_copy1/2/3, Content_bk_250368bb, Menu_copy1, Users_bk111267, Footer_Detail_copy1, SinglePage_*_copy1, Zipcodes_tmp |
ทิ้งทั้งหมด |
ตารางขยะ/backup/ซ้ำ — ไม่ยกเข้า target |
Role, UserRoles |
ย้ายไปกลาง → PORTAL.ModuleRoles + PORTAL.UserRole + Keycloak |
กำหนดสิทธิ์ที่เดียวทุกระบบ (REQ-WPT-005) |
Users.Password (local auth) |
ย้ายไป Keycloak |
SSO กลาง (ThaiD/AD) |
Survey, SurveyDetail, SurveyDetail_Choice, SurveyAnswerDetail, SurveyCategory |
ย้ายไป S9 (PORTAL.Survey*) |
แบบประเมินรวมศูนย์ที่ Portal (REQ-WPT-009) · ⚠️ ข้อมูลเดิมต้องมีแผน archive/migrate |
🔁 รวม / normalize (ลดจำนวนตาราง)
| เดิม (หลายตาราง) |
ใหม่ |
Popup + Popup_Setting + Popup_Size + Popup_Location |
Popup (+ setting fields) |
FAQ + FAQ_Ques + FAQ_Ques_Detail (+ FAQ_Detail) |
Faq + FaqQuestion |
Calendar + Calendar_Category + Calendar_Detail |
Calendar + CalendarCategory |
Theme_Choice + Theme + Theme_Color |
Template + DepartmentTheme + ThemeColor |
*_Detail (multi-language กระจาย) |
*Translation pattern เดียวกันทุกที่ |
หมายเหตุการ rollout
- ต้องทำ ETL ครั้งเดียว จาก legacy ก่อน cutover (ดู Implementation §8)
- ต้อง provision ผู้ดูแลเข้า Keycloak + ลงทะเบียน 6 roles ที่
PORTAL.ModuleRoles
- ต้องตัดสินใจกับลูกค้า: ข้อมูล
Survey* เดิม archive หรือ migrate ไป S9