로스트오더
366
2017-10-17 14:16:32
2
580

웹페이지 데이터 베이스 설계할때 궁금한점이 있습니다.


프로젝트 설계하다가 갑자기 생각나서 질문드립니다.


데이터베이스를 설계하려하는데 1번 방식과 2번 방식중에 어느것이 더 옳은것인지 궁금해서 질문드립니다.

1번 

데이터 베이스에 하나의 큰 테이블이있고 유저코드라는 외래키로 큰 테이블에 있는 데이터를 분류하기


2번

데이터베이스에 유저마다 각각의 테이블이있고 각각의 테이블에 유저의 데이터가 들어가있는방식


예를들어  1번같은 경우에는 유저정보가 모두 한 테이블에 때려박혀있고 유저코드로 분류가 가능하다면

2번은 유저마다 각각의 테이블이있고 그테이블에 각자의 정보를 담고있는것이죠



제생각에는 1번에 수백만개의 데이터가 담겨있을때 유저코드로 엑세스해서 찾아오는거보다 

2번으로하면 매우빠른 속도로 유저개인의 데이터조회가 가능할거같은데

데이터베이스에 수백만개의 데이터가아닌 수십만개의 테이블이있는때 부작용이있나요?

2번방법이 좋은거처럼 느껴지면서도 뭔가 데이터베이스에 수십만개의 테이블이 생성될때 어떤 변수가발생할지 몰라서 좀 꺼려지네요..


사이트 특성상 2번 방법으로 하는게 맞는거같은데 제가 2번방법이 실제로사용되는지 어떤 사이트에서 사용하고있는지 사용되고있지 않다면 어떤 이유로 사용되고있지 않은지 궁금합니다.. 

0
  • 답변 2

  • 아항항하잏이
    77
    2017-10-17 15:12:56

    2번은 회원가입할때마다 테이블이 생성되는건가요?

    조회할땐 어떤근거로 테이블을 명시해주나여??

    일반적으론 1번인데.. 2번이 필요할일이 있을까요.

    프로그래밍이 가능한지도 모르겠네요.

    어쨌건 하드코딩을 피하려면 특정테이블에 

    유저아이디와 테이블명이 매칭되야할텐데.


  • Ires
    1k
    2017-10-17 16:12:05 작성 2017-10-17 16:17:48 수정됨

    1번으로 설계하셔서 2번처럼 쓰시는게 좋을 듯 하네요

    2번은 확장성도 떨어지고(마스터테이블의 명세가 변경되었다면, 하위의 모든 유저별 테이블을 하나하나 손봐야 하는건지...), 사실상의 하드코딩이고(ex:생성된 테이블의 명명규칙은?), 사용자가 삭제되었을때 동적으로 테이블이 지워야 한다는점도(테이블의 동적 생성/삭제).... 으음

    (무엇보다 트리거 등을 이용하지 않는 이상은 정확한 constraint 관계를 유지하기 힘들다는 단점이;;)


    개인적으로는 VIEW 혹은 INDEX등을 활용하시면 2번 구상의 역할을 충분히 소화가능하리라 생각됩니다.

    (미리 유저별 필터링 정보를 만들어서 빠르게 접근하시려는게 목적이 아니실까 싶습니다.)


    굳이 2번처럼 해야한다면 JOB을 돌리거나 외부에서 BATCH 작업을 이용하여 특정시간마다 추출해줘야 하는 형태가 낫지 않을까 싶네요

    (어떤 업체가 검색엔진 기능에서 데이터를 가져가는 절차를 살펴보니, 그런식으로 접근속도를 높이고는 있더군요.. 다만 최신데이터는 실시간 유지가 안됩니다)

  • 로그인을 하시면 답변 을 등록할 수 있습니다.