안녕하세요 프로그래밍을 시작한지 1년되가는 초보입니다
기초적인것을 물어보려합니다 처음 db 를 배울당시
컬럼 하나에 분해할수없는 인자값 하나가 들어가야한다고 배웠습니다
하지만 지금 선임자분이 한걸 보면 한개의 컬럼에 여러가지 인자값을 넣습니다
예를들어 사용자화면에
직원의 급여의종류에 (기본급 ,업무수당, 식대, 차량비) 이렇게
4가지의 입력 필드가있습니다
그러면 pay라는 컬럼에 4가지의 정보를 구분자를 넣어 저장해 놓았다가
서버에서 받아서 씁니다 또 금액만 들어가는것이 아닌
서버에서 배열의 키값으로 사용하고자 기본급도 넣습니다
예를들어 ( 기본급@170000@원||업무수당@@원||) 이런식으로 넣습니다
현재는 db 조작어로 위와같이하여 직원의 급여가 각항목별로 조회가 많이 힘든 상태이며
서버측에서 가공을하여야합니다 물론 문자열치환등 다른방법으로 하면 되겠지만
위와같은 단편적인부분에서는 가능해보일지모르나 여러 변수가생기면 사실상 많은 어려움이있습니다..
현제 저렇게 되어있는곳이 상당히 많이 있습니다
규칙이 절대적인건아니지만 위와같이하는 이유는 잘모르겠습니다 선임은 자신이 편해서 이렇게쓴다고합니다
참고로 제약조건도 걸려있지않습니다 부분부분 기본키는정의 되어있으나 데이터중복 방지용이지 사용하지는 않습니다
위와같은 상황일경우 어떤문제가 생길수있을까요 ?? 참고로 DB 는 마리아DB 이며 서버는 php 입니다
단순히 값의 데이터를 넣는 규약이 정확히 지켜진다면 in/out이면 별로 문제가 되지 않습니다.
근데 부가적으로 발생할 수 있는 문제점은...
1. pay의 데이터를 분석하고자 한다면(통계나 기타 다른 연산) 쿼리의 복잡도가 올라가게 됩니다.
지급금액의 총합을 구하시라고 하면...
2. pay의 조건이 늘어나게 되면 기존의 데이터에 대한 처리 부분은 분기 처리가 필요 (기존 프로그램에 에러 발생 가능성 높음)
기본급, 업무수당, 식대, 차량비 + (상여금)
3. pay쪽에는 인덱스를 사용하진 않겠지만 저런식의 데이터가 인덱스 부분에서 사용된다면 인덱스를 사용할 수 없슴.
(데이터가 많아지면 성능저하 우려...)
대략 이런정도 일거 같네요