Spaces:
Sleeping
Sleeping
π― μ΅μ’ E-R λ€μ΄μ΄κ·Έλ¨ (v2)
π μ΅μ’ ν μ΄λΈ κ΅¬μ± (μ΄ 12κ°)
| λ²νΈ | ν μ΄λΈλͺ | μ£Όμ μμ± | μ€λͺ |
|---|---|---|---|
| 1 | users | user_id, email, name, role, api_key, password_hash | μ¬μ©μ κ³μ |
| 2 | document_types | doc_type_id, type_name, model_name, sorting_method | λ¬Έμ νμ μ μ (μμ ) |
| 3 | projects | project_id, user_id, doc_type_id, project_name, total_pages, status | νλ‘μ νΈ/μΈμ |
| 4 | pages | page_id, project_id, page_number, image_path, analysis_status | νμ΄μ§ μ 보 |
| 5 | layout_elements | element_id, page_id, class_name, bbox_x/y/width/height | λ μ΄μμ μμ (μμ ) |
| 6 | text_contents | text_id, element_id, ocr_text, ocr_confidence | OCR κ²°κ³Ό |
| 7 | ai_descriptions | ai_desc_id, element_id, description, ai_model | AI μ€λͺ |
| 8 | question_groups | question_group_id, page_id, anchor_element_id, start_y, end_y | λ¬Έμ κ·Έλ£Ή (μμ ) |
| 9 | question_elements | qe_id, question_group_id, element_id, order_in_question | λ¬Έμ -μμ λ§€ν |
| 10 | text_versions | version_id, page_id, user_id, content, version_number, version_type | ν μ€νΈ λ²μ κ΄λ¦¬ |
| 11 | formatting_rules | rule_id, doc_type_id, class_name, prefix, suffix, indent_level | ν¬λ§·ν κ·μΉ |
| 12 | combined_results | combined_id, project_id, combined_text, combined_stats | ν΅ν© λ¬Έμ μΊμ |
π· μ΅μ’ E-R λ€μ΄μ΄κ·Έλ¨ (μκ°ν)
βββββββββββββββββββββββββββββββββββββββ
β users β
βββββββββββββββββββββββββββββββββββββββ
β PK: user_id β
β email (UNIQUE) β
β name β
β role (admin/teacher/student) β
β api_key (μνΈν) β
β password_hash β
β created_at β
β updated_at β
βββββββββββββββββββββββββββββββββββββββ
β
β 1:N (ν μ¬μ©μλ μ¬λ¬ νλ‘μ νΈ μμ±)
β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β document_types (μμ ) β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β PK: doc_type_id β
β type_name (worksheet/document/form) UNIQUE β
β model_name (SmartEyeSsen/DocLayout-YOLO) β
(μμ ) β sorting_method (question_based/reading_order) β
β description β
β created_at, updated_at β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β
β 1:N (ν νμ
μΌλ‘ μ¬λ¬ νλ‘μ νΈ)
β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β projects β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β PK: project_id β
β FK: user_id β users(user_id) β
β FK: doc_type_id β document_types(doc_type_id) β
β project_name β
β total_pages (μλ κ³μ°) β
β analysis_mode (auto/manual/hybrid) β
β status (created/in_progress/completed/error) β
β created_at, updated_at β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β β
β 1:N β 1:1
β β
β β
βββββββββββββββββββββββββββββββββββββββββ βββββββββββββββββββββββββββββββββββ
β pages β β combined_results β
βββββββββββββββββββββββββββββββββββββββββ βββββββββββββββββββββββββββββββββββ
β PK: page_id β β PK: combined_id β
β FK: project_id β projects(project_id) β β FK: project_id (UNIQUE) β
β page_number β β combined_text (LONGTEXT) β
β image_path β β combined_stats (JSON) β
β image_width, image_height β β generated_at β
β analysis_status (pending/ β β updated_at β
β processing/completed/error) β βββββββββββββββββββββββββββββββββββ
β processing_time β
β created_at, analyzed_at β
βββββββββββββββββββββββββββββββββββββββββ
β β
β 1:N β 1:N
β β
β β
ββββββββββββββββββββββββββββββββββ ββββββββββββββββββββββββββββββββββββββββ
β layout_elements (μμ ) β β text_versions β
ββββββββββββββββββββββββββββββββββ ββββββββββββββββββββββββββββββββββββββββ
β PK: element_id β β PK: version_id β
β FK: page_id β pages(page_id) β β FK: page_id β pages(page_id) β
β class_name β β FK: user_id β users(user_id) β
β confidence β β content (TEXT) β
β bbox_x, bbox_y β β version_number β
β bbox_width, bbox_height β β version_type (original/ β
β area (μλ κ³μ°) β β auto_formatted/user_edited) β
β y_position (μλ κ³μ°) β β is_current (TRUE/FALSE) β
β x_position (μλ κ³μ°) β β created_at β
(μμ )β (order_index) β ββββββββββββββββββββββββββββββββββββββββ
β created_at β
ββββββββββββββββββββββββββββββββββ
β
ββββββββββββββββββββββββ¬βββββββββββββββββββββββ¬βββββββββββββββββββββββ
β 1:1 (OCR) β 1:1 (AI) β 1:N (μμ μμ) β 1:1 (μ΅μ»€)
β β β β
β β β β (κ΄κ³ μΆκ°)
βββββββββββββββββββββββ βββββββββββββββββββββββ ββββββββββββββββββββββββββββ ββββββββββββββββββββββββββ
β text_contents β β ai_descriptions β β question_elements β β question_groups (μμ ) β
βββββββββββββββββββββββ βββββββββββββββββββββββ ββββββββββββββββββββββββββββ ββββββββββββββββββββββββββ
β PK: text_id β β PK: ai_desc_id β β PK: qe_id β β PK: question_group_id β
β FK: element_id β β FK: element_id β β FK: question_group_id β β FK: page_id β
β (UNIQUE) β β (UNIQUE) β β FK: element_id β β FK: anchor_element_id β (μμ )
β ocr_text (TEXT) β β description β β order_in_question β β (UNIQUE) β
β ocr_engine β β ai_model β β created_at β β start_y, end_y β
β ocr_confidence β β prompt_used β ββββββββββββββββββββββββββββ β element_count β
β language β β created_at β β β created_at β
β created_at β βββββββββββββββββββββββ β N:1 β (μμ ) (question_number) β
βββββββββββββββββββββββ β ββββββββββββββββββββββββββ
β β
βββββββββββββββββββββββββββββ
1:N (κ·Έλ£Ήμ μ¬λ¬ μμ μμλ₯Ό κ°μ§)
βββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β formatting_rules β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β PK: rule_id β
β FK: doc_type_id β document_types(doc_type_id) β
β class_name β
β prefix, suffix β
β indent_level β
β font_size, font_weight β
β created_at, updated_at β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββ
π κ΄κ³(Relationships) μμΈ μ€λͺ (μμ )
1οΈβ£ users β projects (1:N)
- ν μ¬μ©μλ μ¬λ¬ νλ‘μ νΈ μμ± κ°λ₯
- ν νλ‘μ νΈλ ν λͺ
μ μ¬μ©μμκ²λ§ μν¨
- FK: projects.user_id β users.user_id
- ON DELETE CASCADE: μ¬μ©μ μμ μ νλ‘μ νΈλ μμ
2οΈβ£ document_types β projects (1:N)
- ν λ¬Έμ νμ
(worksheet/document)μΌλ‘ μ¬λ¬ νλ‘μ νΈ μμ± κ°λ₯
- ν νλ‘μ νΈλ νλμ λ¬Έμ νμ
λ§ κ°μ§
- FK: projects.doc_type_id β document_types.doc_type_id
- ON DELETE RESTRICT: νμ
μ¬μ© μ€μ΄λ©΄ μμ λΆκ°
3οΈβ£ projects β pages (1:N)
- ν νλ‘μ νΈλ μ¬λ¬ νμ΄μ§ ν¬ν¨
- ν νμ΄μ§λ νλμ νλ‘μ νΈμλ§ μν¨
- FK: pages.project_id β projects.project_id
- ON DELETE CASCADE: νλ‘μ νΈ μμ μ νμ΄μ§λ μμ
- νΈλ¦¬κ±°: νμ΄μ§ μΆκ° μ projects.total_pages μλ μ¦κ°
4οΈβ£ projects β combined_results (1:1)
- ν νλ‘μ νΈλ νλμ ν΅ν© κ²°κ³Ό μΊμλ§ κ°μ§
- ν ν΅ν© κ²°κ³Όλ νλμ νλ‘μ νΈμλ§ μν¨
- FK: combined_results.project_id β projects.project_id (UNIQUE)
- ON DELETE CASCADE: νλ‘μ νΈ μμ μ μΊμλ μμ
5οΈβ£ pages β layout_elements (1:N)
- ν νμ΄μ§λ μ¬λ¬ λ μ΄μμ μμ ν¬ν¨
- ν μμλ νλμ νμ΄μ§μλ§ μν¨
- FK: layout_elements.page_id β pages.page_id
- ON DELETE CASCADE: νμ΄μ§ μμ μ μμλ μμ
6οΈβ£ pages β text_versions (1:N)
- ν νμ΄μ§λ μ¬λ¬ ν
μ€νΈ λ²μ κ°μ§ (1, 2, 3, ...)
- ν λ²μ μ νλμ νμ΄μ§μλ§ μν¨
- FK: text_versions.page_id β pages.page_id
- ON DELETE CASCADE: νμ΄μ§ μμ μ λͺ¨λ λ²μ μμ
- UNIQUE KEY: (page_id, version_number) - νμ΄μ§ λ΄ λ²μ λ²νΈ μ€λ³΅ λ°©μ§
7οΈβ£ layout_elements β text_contents (1:1)
- ν λ μ΄μμ μμλ νλμ OCR κ²°κ³Όλ§ κ°μ§
- ν OCR κ²°κ³Όλ νλμ μμμλ§ μν¨
- FK: text_contents.element_id β layout_elements.element_id (UNIQUE)
- ON DELETE CASCADE: μμ μμ μ OCR κ²°κ³Όλ μμ
8οΈβ£ layout_elements β ai_descriptions (1:1)
- ν λ μ΄μμ μμ(figure/table/flowchart)λ νλμ AI μ€λͺ
λ§ κ°μ§
- ν AI μ€λͺ
μ νλμ μμμλ§ μν¨
- FK: ai_descriptions.element_id β layout_elements.element_id (UNIQUE)
- ON DELETE CASCADE: μμ μμ μ AI μ€λͺ
λ μμ
9οΈβ£ pages β question_groups (1:N)
- ν νμ΄μ§λ μ¬λ¬ λ¬Έμ κ·Έλ£Ή ν¬ν¨
- ν λ¬Έμ κ·Έλ£Ήμ νλμ νμ΄μ§μλ§ μν¨
- FK: question_groups.page_id β pages.page_id
- ON DELETE CASCADE: νμ΄μ§ μμ μ λ¬Έμ κ·Έλ£Ήλ μμ
π (μ κ·) layout_elements β question_groups (1:1)
- 'μ΅μ»€' μμμ 'λ¬Έμ κ·Έλ£Ή' κ°μ κ΄κ³
- ν λ μ΄μμ μμ(μ΅μ»€)λ νλμ λ¬Έμ κ·Έλ£Ήλ§ μμ± κ°λ₯
- ν λ¬Έμ κ·Έλ£Ήμ νλμ μ΅μ»€ μμμ μν΄ μμ±λ¨
- FK: question_groups.anchor_element_id β layout_elements.element_id
- ON DELETE CASCADE: μ΅μ»€ μμ μμ μ, κ·Έλ£Ή λ° νμ μμ λ§€ν(question_elements)λ μ°μ μμ
1οΈβ£1οΈβ£ question_groups β question_elements (1:N)
- 'λ¬Έμ κ·Έλ£Ή'κ³Ό 'μμ μμ' λ§€ν κ°μ κ΄κ³
- ν λ¬Έμ κ·Έλ£Ήμ μ¬λ¬ μμ μμ(ν
μ€νΈ, κ·Έλ¦Ό, μ νμ§ λ±)λ₯Ό ν¬ν¨
- ν λ§€ν λ μ½λλ νλμ λ¬Έμ κ·Έλ£Ήμλ§ μν¨
- FK: question_elements.question_group_id β question_groups.question_group_id
- ON DELETE CASCADE: λ¬Έμ κ·Έλ£Ή μμ μ λ§€νλ μμ
1οΈβ£2οΈβ£ layout_elements β question_elements (N:1)
- 'μμ μμ'μ 'λ§€ν' κ°μ κ΄κ³
- ν λ μ΄μμ μμ(μμ)λ νλμ λ¬Έμ κ·Έλ£Ήμλ§ μν¨ (N:1)
- (ν λ¬Έμ λ μ¬λ¬ μμ μμλ₯Ό κ°μ§)
- FK: question_elements.element_id β layout_elements.element_id
- ON DELETE CASCADE: μμ μμ μμ μ λ§€νλ μμ
- UNIQUE KEY: (question_group_id, element_id) - μ€λ³΅ λ§€ν λ°©μ§
1οΈβ£3οΈβ£ document_types β formatting_rules (1:N)
- ν λ¬Έμ νμ
μ μ¬λ¬ ν¬λ§·ν
κ·μΉ κ°μ§
- ν κ·μΉμ νλμ λ¬Έμ νμ
μλ§ μν¨
- FK: formatting_rules.doc_type_id β document_types.doc_type_id
- ON DELETE CASCADE: νμ
μμ μ κ·μΉλ μμ
- UNIQUE KEY: (doc_type_id, class_name) - νμ
λ³ ν΄λμ€ κ·μΉ μ€λ³΅ λ°©μ§