sourcecode

데이터베이스에 중첩된 테이블

copyscript 2023. 7. 23. 14:35
반응형

데이터베이스에 중첩된 테이블

저는 여러 프로세스가 있고 각 프로세스마다 처리해야 할 데이터 항목이 다른 프로젝트를 수행하고 있습니다.데이터 항목(각 공정의 경우)의 열은 서로 다르지만 항상 동일한 공정의 열은 같습니다.

처음에는 모든 프로세스에 대한 테이블이 있으면 괜찮을 것이라고 생각했습니다. 그리고 나서 새로운 프로세스가 생성될 때마다 항목 데이터가 포함된 다른 테이블도 생성될 수 있지만, 항상 새로운 테이블을 생성할 수 있는 새로운 프로세스 방법이 있다는 것이 밝혀졌습니다.그리고 나서 nested tables를 조사하다가 MySQL에 nested tables의 개념이 없다는 것을 알게 되었습니다. (MariaDB로 가능하다고 들었습니다.)누군가 그것과 함께 일한 적이 있습니까?

여기서 좀 더 명확하게 하기 위해 현재의 개념이 있습니다(여기의 열과 값은 개념을 더 명확하게 하기 위해 근사치일 뿐입니다).

process_table:

ID | process_name | item_id | ...
---------------------------------
1  | some_process | 111     | ...    
2  | other_process| 222     | ...    
3  | third_process| 333     | ...    
4  | third_process| 444     | ...
...

item_tem:

item_table_1:
ID | Column1 | Column2 | process_name | ...
--------------------------------------
111| val1    | val2    | some_process | ...
...

item_table_2:
ID | Column4 | Column5 | process_name | ...
--------------------------------------
333| val1    | val2    | third_process| ...
444| val3    | val4    | third_process| ...
...

따라서 각 새 프로세스에 대해 새 item_table이 존재하고 각 프로세스에 대해 서로 다른 열 이름을 가져야 하며, 항목 테이블에서 특정 항목은 프로세스 테이블의 'item_id' 열에 연결됩니다.

이에 대한 가장 쉬운 해결책은 (항상 새 테이블을 만드는 것이 옵션이 아닐 때) 중첩 테이블일 것입니다. 여기서 프로세스 테이블에는 item_table 값을 유지하는 다른 열이 있을 수 있고 프로세스 자체에 따라 다른 열이 있을 수 있습니다.

따라서 중요한 질문은 MySQL에 중첩된 테이블과 유사한 것이 있거나 항상 새로운 테이블을 만들지 않고 이러한 구조를 구현하는 데 도움이 되는 다른 것이 있습니까? 그렇지 않다면 MariaDB에 대한 팁이나 리뷰가 있을 수도 있습니다.다른 사용자가 이미 중첩 테이블을 구현했을 수 있습니다(가능한 경우).

해결책하나는 'item_table'에 대한 테이블을 한 개 가진 다음 프로세스에 대한 모든 서로 다른 값에 대한 열을 한 개 갖는 입니다. 예를 들어 JSON 형식으로 저장되지만 이 경우 테이블을 읽는 것이 훨씬 더 어려워집니다.

예:

item_table:
ID | process_name | data
--------------------------------------
111| some_process | {values: {column1:val1,column2:val2,...}}

항목 테이블의 값을 처리하는 데 사용합니까? 아니면 비슷한 것을 사용합니까? (이 값에 대해 쿼리를 실행합니까?)

이 테이블/데이터베이스 구조는 다음과 같습니다.비효율적이고 유지할 수 없는 이모.

이 모든 작업은 테이블 두 개로 수행해야 합니다.프로세스 테이블 및 다음을 포함하는 항목 테이블process_id프로세스 테이블에서 (이름이 아님).

항목의 열 개수가 항상 동일한 경우 value_1, value_2(또는 프로세스에 가장 적합한 값) 또는 JSON 문자열이 있는 json/blob/varchar 필드와 같은 값에 "일반" 이름을 사용합니다.(이 데이터에 대해 쿼리를 실행해야 하는 경우에만 적용됨)

id | process_id | data

편집: 편집과 두 번째 솔루션이 최선의 방법이어야 합니다.기능과 성능보다 "가독성"이 우선시되지 않습니다.

언급URL : https://stackoverflow.com/questions/59837495/nested-tables-in-database

반응형