You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
100 lines
5.6 KiB
100 lines
5.6 KiB
|
1 month ago
|
# [2단계] 데이터베이스 설계 (DB Design & ERD)
|
||
|
|
|
||
|
|
본 문서는 누수 시험 시스템에서 취급하는 계측 데이터 및 로그인 사용자 계정 정보를 관리하기 위한 MSSQL 데이터베이스 설계를 정의합니다.
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## 1. 개체 및 관계 정의 (Entity Relationship Summary)
|
||
|
|
|
||
|
|
본 시스템은 단독 장비가 아닌 다수 지그(Jig)와 채널(Left/Right)에서 생산되는 검사 데이터를 수집하므로, 다음의 핵심 엔티티를 관리합니다.
|
||
|
|
|
||
|
|
* **Users (사용자 계정)**: 장비를 조작하는 작업자(Operator) 또는 관리자 계정 정보.
|
||
|
|
* **EOL (검사 결과 이력)**: 제품의 누수 시험 최종 결과 데이터로, ZMDI/ADLINK 센서로부터 읽어들인 `IC_SN`을 주 식별자로 사용합니다.
|
||
|
|
* **SystemConfigs (장비 설정 캐시)**: 프로그램의 상/하한 스펙(SpecUL/LL) 및 통신 포트 옵션 이력.
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## 2. 테이블 명세서 (Table Specification)
|
||
|
|
|
||
|
|
### 2.1 Users (사용자 정보 테이블)
|
||
|
|
* **설명**: 장비 로그인 및 조작을 인가받은 사용자 계정을 저장합니다.
|
||
|
|
* **테이블명**: `[dbo].[Users]`
|
||
|
|
|
||
|
|
| 컬럼명 | 데이터 타입 | Null 여부 | 제약조건 | 설명 |
|
||
|
|
| :--- | :--- | :--- | :--- | :--- |
|
||
|
|
| **OperatorId** | `VARCHAR(50)` | NOT NULL | PK | 작업자 고유 식별 아이디 (로그인 ID) |
|
||
|
|
| **Password** | `VARCHAR(256)` | NOT NULL | - | 단방향 해시화된 비밀번호 (또는 레거시 대조용 암호) |
|
||
|
|
| **OperatorName**| `NVARCHAR(50)` | NULL | - | 작업자 실명 |
|
||
|
|
| **Role** | `VARCHAR(20)` | NOT NULL | DEFAULT 'OPERATOR' | 사용자 권한 (`ADMIN`, `OPERATOR`, `DEVELOPER`) |
|
||
|
|
| **CreatedAt** | `DATETIME` | NOT NULL | DEFAULT GETDATE()| 계정 등록 일시 |
|
||
|
|
|
||
|
|
### 2.2 EOL (검사 데이터 저장 테이블)
|
||
|
|
* **설명**: 최종 EOL(End of Line) 누수 검사 결과를 기록합니다. 제품 바코드(`IC_SN`)를 기준으로 UPSERT(MERGE) 처리됩니다.
|
||
|
|
* **테이블명**: `[dbo].[EOL]`
|
||
|
|
|
||
|
|
| 컬럼명 | 데이터 타입 | Null 여부 | 제약조건 | 설명 |
|
||
|
|
| :--- | :--- | :--- | :--- | :--- |
|
||
|
|
| **IC_SN** | `VARCHAR(50)` | NOT NULL | PK | 센서에서 판독한 16자리 제품 고유 시리얼 번호 |
|
||
|
|
| **PCB_Barcode** | `VARCHAR(50)` | NOT NULL | - | 인쇄 회로 기판(PCB) 바코드 (식별 불가 시 `-` 처리) |
|
||
|
|
| **Maker** | `NVARCHAR(50)` | NULL | - | 제조사 식별 정보 |
|
||
|
|
| **Model** | `NVARCHAR(50)` | NULL | - | 검사 대상 모델 코드 |
|
||
|
|
| **Variant_1** | `NVARCHAR(50)` | NULL | - | 파생 기종 식별 속성 1 |
|
||
|
|
| **Variant_2** | `NVARCHAR(50)` | NULL | - | 파생 기종 식별 속성 2 |
|
||
|
|
| **Operator** | `VARCHAR(50)` | NOT NULL | FK (Users.OperatorId) | 검사를 진행한 로그인 작업자 ID |
|
||
|
|
| **Production_Date**| `DATETIME` | NOT NULL | DEFAULT GETDATE() | 검사 수행 완료 일시 |
|
||
|
|
| **Line** | `NVARCHAR(30)` | NULL | - | 생산 라인 번호 / 명칭 |
|
||
|
|
| **Lot_No** | `NVARCHAR(50)` | NULL | - | 작업 지시 묶음 번호 (Lot Number) |
|
||
|
|
| **Jig_No** | `NVARCHAR(20)` | NULL | - | 검사에 사용된 지그(Jig) 번호 |
|
||
|
|
| **Channel** | `VARCHAR(10)` | NOT NULL | - | 검사 물리 채널 명칭 (`LEFT`, `RIGHT`) |
|
||
|
|
| **Spec_UL** | `DECIMAL(10, 4)`| NOT NULL | - | 합격 스펙 상한치 (Upper Limit) |
|
||
|
|
| **Spec_LL** | `DECIMAL(10, 4)`| NOT NULL | - | 합격 스펙 하한치 (Lower Limit) |
|
||
|
|
| **Leak_Value** | `DECIMAL(10, 4)`| NOT NULL | - | 센서에서 최종 파싱된 실측 누설값 |
|
||
|
|
| **Result** | `VARCHAR(5)` | NOT NULL | CHECK (in ('OK', 'NG'))| 합격(`OK`) 또는 불합격(`NG`) 판정 |
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## 3. 엔티티 관계도 (Entity Relationship Diagram - ERD)
|
||
|
|
|
||
|
|
`EOL` 검사 이력은 `Users` 테이블의 작업자 고유 ID(`OperatorId`)를 외래키(`Operator`)로 참조하여, 어떤 작업자가 어떤 검사 이력을 남겼는지에 대한 일대다(1:N) 식별 및 추적이 가능합니다.
|
||
|
|
|
||
|
|
```mermaid
|
||
|
|
erDiagram
|
||
|
|
USERS {
|
||
|
|
VARCHAR_50 OperatorId PK "작업자 ID"
|
||
|
|
VARCHAR_256 Password "비밀번호"
|
||
|
|
NVARCHAR_50 OperatorName "작업자 실명"
|
||
|
|
VARCHAR_20 Role "권한 (ADMIN/OPERATOR)"
|
||
|
|
DATETIME CreatedAt "계정 생성일시"
|
||
|
|
}
|
||
|
|
|
||
|
|
EOL {
|
||
|
|
VARCHAR_50 IC_SN PK "제품 시리얼 번호"
|
||
|
|
VARCHAR_50 PCB_Barcode "PCB 바코드"
|
||
|
|
NVARCHAR_50 Maker "제조사"
|
||
|
|
NVARCHAR_50 Model "모델명"
|
||
|
|
NVARCHAR_50 Variant_1 "속성 1"
|
||
|
|
NVARCHAR_50 Variant_2 "속성 2"
|
||
|
|
VARCHAR_50 Operator FK "작업자 ID"
|
||
|
|
DATETIME Production_Date "검사 완료일시"
|
||
|
|
NVARCHAR_30 Line "생산 라인"
|
||
|
|
NVARCHAR_50 Lot_No "로트 번호"
|
||
|
|
NVARCHAR_20 Jig_No "지그 번호"
|
||
|
|
VARCHAR_10 Channel "채널 (LEFT/RIGHT)"
|
||
|
|
DECIMAL Spec_UL "스펙 상한치"
|
||
|
|
DECIMAL Spec_LL "스펙 하한치"
|
||
|
|
DECIMAL Leak_Value "실측 누출량"
|
||
|
|
VARCHAR_5 Result "판정 (OK/NG)"
|
||
|
|
}
|
||
|
|
|
||
|
|
USERS ||--o{ EOL : "performs"
|
||
|
|
```
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## 4. 데이터 정합성 유지 전략 (Data Integrity & Optimization)
|
||
|
|
|
||
|
|
* **UPSERT 쿼리 이중화**: 제품 시리얼 `IC_SN`은 고유하므로, 동일 제품이 재검사(Retest)되거나 지연 전송되었을 경우 중복 릴레이션이 맺어지지 않도록 `MERGE` 구문을 활용해 기존 검사 행을 업데이트(UPDATE)하고 신규일 때만 신규 행을 삽입(INSERT)합니다.
|
||
|
|
* **인덱스(Index) 설계 전략**:
|
||
|
|
* **Clustered Index**: 데이터가 생성순서에 따라 밀집되도록 `Production_Date`를 포함하거나 주 키인 `IC_SN`에 적용합니다.
|
||
|
|
* **Non-Clustered Index**: 작업 이력 대량 조회(`DataView`)의 검색 속도 최적화를 위해 복합 인덱스 `IX_EOL_Search (Production_Date, Result, Lot_No)` 구성을 제안합니다.
|