1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
|
import { pgTable, serial, varchar, timestamp } from "drizzle-orm/pg-core";
import { relations } from "drizzle-orm";
/**
* 접근법 1: WSDL과 동일하게 DB 테이블/컬럼명 및 변수 이름 만들기
* - 모든 테이블/컬럼명이 SAP 시스템의 네이밍을 그대로 유지
* - 개발자가 SAP 시스템에 익숙하다면 이해하기 쉬움
* - SAP 문서와 비교하기 쉬움
*/
// 자재 마스터 테이블 (MATL)
export const MATL = pgTable("MATL", {
id: serial("id").primaryKey(),
MATNR: varchar("MATNR", { length: 18 }).notNull().unique(), // Material Number (자재 번호) (PK)
MBRSH: varchar("MBRSH", { length: 1 }), // Industry Sector (산업 부문)
MTART: varchar("MTART", { length: 4 }), // Material Type (자재 유형)
LVORM: varchar("LVORM", { length: 1 }), // Deletion flag (삭제 플래그)
MEINS: varchar("MEINS", { length: 3 }), // Base Unit of Measure (기본 단위)
MATKL: varchar("MATKL", { length: 9 }), // Material Group (자재 그룹)
BISMT: varchar("BISMT", { length: 18 }), // Old material number (기존 자재 번호)
SPART: varchar("SPART", { length: 2 }), // Division (부문)
PRDHA: varchar("PRDHA", { length: 18 }), // Product hierachy (제품 계층)
MSTAE: varchar("MSTAE", { length: 2 }), // Material Status (자재 상태)
MSTDE: varchar("MSTDE", { length: 8 }), // Date from which the cross-plant material status is (자재 상태 유효 날짜)
BRGEW: varchar("BRGEW", { length: 13 }), // Gross weight (총 중량)
GEWEI: varchar("GEWEI", { length: 3 }), // Weight Unit (중량 단위)
NTGEW: varchar("NTGEW", { length: 13 }), // Net Weight (순 중량)
VOLUM: varchar("VOLUM", { length: 13 }), // Volume (체적)
VOLEH: varchar("VOLEH", { length: 3 }), // Volume Unit (체적 단위)
GROES: varchar("GROES", { length: 32 }), // Size/dimensions (크기/치수)
LAENG: varchar("LAENG", { length: 13 }), // Length (길이)
BREIT: varchar("BREIT", { length: 13 }), // Width (너비)
HOEHE: varchar("HOEHE", { length: 13 }), // Height (높이)
MEABM: varchar("MEABM", { length: 3 }), // Unit of Dimension for Length/Width/Height (치수 단위)
MAGRV: varchar("MAGRV", { length: 4 }), // Material Group: Packaging Materials (포장 자재 그룹)
VHART: varchar("VHART", { length: 4 }), // Packaging Material Type (포장 자재 유형)
ZZNAME: varchar("ZZNAME", { length: 40 }), // Material Name (자재 이름)
ZZSPEC: varchar("ZZSPEC", { length: 255 }), // Specification (자재 사양)
ZZDESC: varchar("ZZDESC", { length: 255 }), // Description (자재 설명)
ZZMMTYP: varchar("ZZMMTYP", { length: 1 }), // Material Master Type (자재 마스터 유형)
ZZREGDT: varchar("ZZREGDT", { length: 8 }), // Registered Date (등록 날짜)
ZZREGTM: varchar("ZZREGTM", { length: 6 }), // Registered Time (등록 시간)
ZZREGUS: varchar("ZZREGUS", { length: 12 }), // Registerd User (등록 사용자)
ZZAPPDT: varchar("ZZAPPDT", { length: 8 }), // Approval Date (승인 날짜)
ZZAPPTM: varchar("ZZAPPTM", { length: 6 }), // Approval Time (승인 시간)
ZZAPPUS: varchar("ZZAPPUS", { length: 12 }), // Approval User (승인 사용자)
ZZLAMDT: varchar("ZZLAMDT", { length: 8 }), // Last Modified Date (최종 수정 날짜)
ZZLAMTM: varchar("ZZLAMTM", { length: 6 }), // Last Modified Time (최종 수정 시간)
ZZLAMUS: varchar("ZZLAMUS", { length: 12 }), // Last Modified User (최종 수정 사용자)
ZZPRFLG: varchar("ZZPRFLG", { length: 1 }), // CRUD Status (처리 플래그)
ZZDOKAR: varchar("ZZDOKAR", { length: 3 }), // Document Type (문서 유형)
ZZDOKNR: varchar("ZZDOKNR", { length: 25 }), // Document Number (문서 번호)
ZZDOKTL: varchar("ZZDOKTL", { length: 3 }), // Document Part (문서 부분)
ZZDOKVR: varchar("ZZDOKVR", { length: 2 }), // Document Version (문서 버전)
createdAt: timestamp("created_at").defaultNow().notNull(),
updatedAt: timestamp("updated_at").defaultNow().notNull(),
});
// 자재 설명 테이블 (DESC)
export const DESC = pgTable("DESC", {
id: serial("id").primaryKey(),
MATNR: varchar("MATNR", { length: 18 }).notNull(), // Material Number (자재 번호) (FK)
SPRAS: varchar("SPRAS", { length: 1 }), // Language (언어)
MAKTX: varchar("MAKTX", { length: 40 }), // Material Description (Short Text) (자재 설명)
createdAt: timestamp("created_at").defaultNow().notNull(),
updatedAt: timestamp("updated_at").defaultNow().notNull(),
});
// 플랜트별 자재 데이터 테이블 (PLNT)
export const PLNT = pgTable("PLNT", {
id: serial("id").primaryKey(),
MATNR: varchar("MATNR", { length: 18 }).notNull(), // Material Number (자재 번호) (FK)
WERKS: varchar("WERKS", { length: 4 }), // Plant (플랜트)
LVORM: varchar("LVORM", { length: 1 }), // Deletion Flag (삭제 플래그)
MMSTA: varchar("MMSTA", { length: 2 }), // Plant-Specific Material Status (플랜트별 자재 상태)
MMSTD: varchar("MMSTD", { length: 8 }), // Date from which the plant-specific material status (플랜트별 자재 상태 유효 날짜)
ZZMTARP: varchar("ZZMTARP", { length: 4 }), // Plant Material Type (플랜트 자재 유형)
ZZREGDT: varchar("ZZREGDT", { length: 8 }), // Registered Dated (등록 날짜)
ZZREGTM: varchar("ZZREGTM", { length: 6 }), // Registered Time (등록 시간)
ZZREGUS: varchar("ZZREGUS", { length: 12 }), // Registered USER (등록 사용자)
ZZLAMDT: varchar("ZZLAMDT", { length: 8 }), // Last Modified Date (최종 수정 날짜)
ZZLAMTM: varchar("ZZLAMTM", { length: 6 }), // Last Modified Time (최종 수정 시간)
ZZLAMUS: varchar("ZZLAMUS", { length: 12 }), // Last Modified User (최종 수정 사용자)
ZZPRFLG: varchar("ZZPRFLG", { length: 1 }), // CRUD Status (처리 플래그)
createdAt: timestamp("created_at").defaultNow().notNull(),
updatedAt: timestamp("updated_at").defaultNow().notNull(),
});
// 단위 테이블 (UNIT)
export const UNIT = pgTable("UNIT", {
id: serial("id").primaryKey(),
MATNR: varchar("MATNR", { length: 18 }).notNull(), // Material Number (자재 번호) (FK)
MEINH: varchar("MEINH", { length: 3 }), // Alternative Unit of Measure for Stockkeeping Unit (대체 단위)
UMREZ: varchar("UMREZ", { length: 5 }), // Numerator for Conversion to Base Units of Measure (기본 단위 변환 분자)
UMREN: varchar("UMREN", { length: 5 }), // Denominator for conversion to base units of measure (기본 단위 변환 분모)
LAENG: varchar("LAENG", { length: 13 }), // Length (길이)
BREIT: varchar("BREIT", { length: 13 }), // Width (너비)
HOEHE: varchar("HOEHE", { length: 13 }), // Height (높이)
MEABM: varchar("MEABM", { length: 3 }), // Unit of Dimension for Length/Width/Height (치수 단위)
VOLUM: varchar("VOLUM", { length: 13 }), // Volume (체적)
VOLEH: varchar("VOLEH", { length: 3 }), // Volume unit (체적 단위)
BRGEW: varchar("BRGEW", { length: 13 }), // Gross Weight (총 중량)
GEWEI: varchar("GEWEI", { length: 3 }), // Weight Unit (중량 단위)
createdAt: timestamp("created_at").defaultNow().notNull(),
updatedAt: timestamp("updated_at").defaultNow().notNull(),
});
// 클래스 할당 테이블 (CLASSASGN)
export const CLASSASGN = pgTable("CLASSASGN", {
id: serial("id").primaryKey(),
MATNR: varchar("MATNR", { length: 18 }).notNull(), // Material Number (자재 번호) (FK)
CLASS: varchar("CLASS", { length: 18 }), // Class number (클래스 번호)
KLART: varchar("KLART", { length: 3 }), // Class Type (클래스 유형)
createdAt: timestamp("created_at").defaultNow().notNull(),
updatedAt: timestamp("updated_at").defaultNow().notNull(),
});
// 특성 할당 테이블 (CHARASGN)
export const CHARASGN = pgTable("CHARASGN", {
id: serial("id").primaryKey(),
MATNR: varchar("MATNR", { length: 18 }).notNull(), // Material Number (자재 번호) (FK)
CLASS: varchar("CLASS", { length: 18 }), // Class number (클래스 번호)
KLART: varchar("KLART", { length: 3 }), // Class Type (클래스 유형)
ATNAM: varchar("ATNAM", { length: 30 }), // Characteristic Name (특성 이름)
ATWRT: varchar("ATWRT", { length: 30 }), // Characteristic Value (특성 값)
ATFLV: varchar("ATFLV", { length: 16 }), // Internal floating point from (내부 실수값 시작)
ATAWE: varchar("ATAWE", { length: 3 }), // Unit of Measurement (측정 단위)
ATFLB: varchar("ATFLB", { length: 16 }), // Internal floating point value to (내부 실수값 끝)
ATAW1: varchar("ATAW1", { length: 3 }), // Unit of Measurement (측정 단위)
ATBEZ: varchar("ATBEZ", { length: 30 }), // 특성내역 (특성 설명)
ATWTB: varchar("ATWTB", { length: 30 }), // 특성값내역 (특성 값 설명)
createdAt: timestamp("created_at").defaultNow().notNull(),
updatedAt: timestamp("updated_at").defaultNow().notNull(),
});
// 관계 정의
export const MATLRelations = relations(MATL, ({ many }) => ({
descriptions: many(DESC),
plants: many(PLNT),
units: many(UNIT),
classAssignments: many(CLASSASGN),
characteristicAssignments: many(CHARASGN),
}));
export const DESCRelations = relations(DESC, ({ one }) => ({
material: one(MATL, {
fields: [DESC.MATNR],
references: [MATL.MATNR],
}),
}));
export const PLNTRelations = relations(PLNT, ({ one }) => ({
material: one(MATL, {
fields: [PLNT.MATNR],
references: [MATL.MATNR],
}),
}));
export const UNITRelations = relations(UNIT, ({ one }) => ({
material: one(MATL, {
fields: [UNIT.MATNR],
references: [MATL.MATNR],
}),
}));
export const CLASSASGNRelations = relations(CLASSASGN, ({ one }) => ({
material: one(MATL, {
fields: [CLASSASGN.MATNR],
references: [MATL.MATNR],
}),
}));
export const CHARASGNRelations = relations(CHARASGN, ({ one }) => ({
material: one(MATL, {
fields: [CHARASGN.MATNR],
references: [MATL.MATNR],
}),
}));
|