2017-12-31 43 views
0

기술 및 교육 세부 정보를 모두 모아 놓을 것입니다. 나는 열을해야합니다 :합니다 (DB 또는 NULL) competency_level 및 priority_level이 포럼에서 비어있을 수 있습니다 교육, 유사DB 디자인 모범 사례 : 개별 항목이있는 여러 행 또는 여러 항목이있는 단일 행을 반환 하시겠습니까?

skills_mat_id | user_id | skill | competency_level | priority_level | 

뭔가를.

문제는 내가 각 기술에 대한 별도의 라인 항목을 작성해야한다, 즉 :

1, user1, java, 7, 1 
2, user1, php, 6, 2 
3, user1, css, 4, 2 
4, user1, python, 8, NULL 

또는 내가 같은 열에서 모든 것을해야한다 : 내가 처음 같은 느낌

1|user1|java,php,css,python|7,6,4,8|1,2,2,NULL 

을 옵션은 구현하기가 훨씬 쉽지만 (NULL/빈 필드로 인해 프론트 엔드에서 실수하는 경향이 적다) 두 번째 옵션이 더 "효율적"으로 보이고 많은 기술 목록이 될 수있는 단일 행을 반환합니다 . 두 옵션 모두 성능에 차이가 있습니까? 이 문제가 프론트 엔드 문제일까요? 또는 디자인 결정은 DB 성능에 상당한 영향을 미칩니다. 나는 이것을 위해 MySQL을 사용할 것이지만, 어느 데이터베이스 플랫폼에 대해서도 특별히 부분적인 것은 아니다.

두 번째 옵션으로 특정 스킬을 업데이트하거나 삭제하는 것과 관련이 있습니다. 우연히 레코드의 잘못된 부분을 실수로 삭제하거나 업데이트 할 가능성을 줄이는 방법으로이 작업을 수행하는 방법에 대해서는 확신하지 못합니다.

Google은 잠재적으로 "기술"또는 "교육"테이블을 크게 늘릴 수있는 수십만 명의 사용자를 찾고 있으며 따라서 이와 같은 데이터 세트에 대한 최선의 방법이 있는지 궁금해하고 있었습니까?

+0

정규화가 잘못되었습니다. 그것이 무엇인지 모르는 경우, 필자는이 책에 대한 좋은 점을 들었습니다. Mereals를위한 데이터베이스 디자인. –

답변

2

단일 행 읽기 대 다중 행 최적화는 조기 미세 최적화 영역에서 매우 중요합니다. 표를 skill_mat_id + user_id으로 색인화하면이 열의 선택이 매우 빨라야합니다. 성과는 걱정할 필요가 없습니다. 반면에 쉼표 형식으로 저장하면 유지 관리가 어렵고 오류가 발생하기 쉽고 프론트 엔드는 각 스킬 이름을 능숙하게 병합하는 작업을해야합니다. 모듈화와 우아함을 우선 디자인하고 항상 필요한 경우에만 성능을 최적화하십시오.

이 성능이 절대적으로 필요한 경우 벤치마킹 한 다음 추가 성능이 필요한지 확인하십시오. 그것은 큰 사물의 계획에서 가장 가능성이 없습니다.

0

단순한 관점에서 볼 때 행이 여러 개 더 좋습니다.

그렇지 않으면 잠재적으로 모든 필드 근처에서 반복해야합니다.

더하기, 무엇을 저장 하시겠습니까? 별로. 몇 줄을 넣으면 공간을 절약 할 수 있습니다. 몇 백 달러를 넣으면 zip 유틸리티로 더 나은 압축률을 얻을 수 있습니다.

코드는 간단하므로 디버그하기가 쉽습니다.

관련 문제