2011-07-03 2 views
2

테이블의 각 ID에 대한 ID 인덱스 목록을 저장하는 방법을 궁금합니다. 이것들은 효과적으로 ID들 간의 "관계"를 형성 할 것입니다. 여기에 기본 테이블 지금까지의 :MySQL 데이터베이스 설계 질문 - 목록/인덱스 배열 저장

테이블 주 :

  • text_info_1

    • ID, 정수, 차

    • 이름, VARCHAR, VARCHAR

    • text_info_2, varchar

    이제 각 행에 대해 다른 행 ID의 목록이 표시되어 한 행이 다음 행과 어떻게 관련되는지 보여줍니다. 예를 들어 ID # 5 인 행은 ID 6,7,9,25, ... 등과 관련이있을 수 있습니다.

    여기에 내가 생각했던 옵션입니다

    1. 가 텍스트 필드로 새 열을 만들고 이러한 정수 값의 직렬화 된 목록을 저장합니다. 그런 다음 내가 원할 때 비공개로해라.

    2. relation_id (int 자동 증가 기본 키), name1, name2 및 [선호 할 수있는 관계 유형을 지정하는 기타 선택적 필드]로 "relations"이라는 새 테이블을 만듭니다.

    나는 해킹 비트입니다. 이전에 해본 적이 있지만 작동하지만 옵션 2가 더 좋은 디자인일까요?

    속도가 걱정됩니다. 옵션 1을 사용하면 main WHERE id = $ id에서 SELECT 관계를 수행 한 다음 결과를 unserialize하고 정수 인덱스로 배열을 만들 수 있습니다. 그러나 옵션 2를 사용하면 여러 번 (10 배 이상) 큰 테이블을 탐색해야하며 "SELECT name1, name2 FROM relations"을 수행해야합니다.

    속도가 내 우선 순위입니다. 내가 알아내는 것이 궁금 할 지 모르지만 어느 것이 공간을 위해 더 나은지는 잘 모르겠다.

    어떤 옵션을 선택해야합니까? 내가 고려하지 않은 다른 좋은 선택이 있습니까? 나는 또한 데이터베이스 디자인에 대한 좋은 일반 포인터를 주셔서 감사합니다!

    감사합니다.

  • 답변

    0

    두 번째 옵션이 더 좋습니다. 데이터베이스 디자인을 더 잘하려면 데이터베이스 정규화에 대해 읽어야합니다. 슬프게도, 내가 사용한 모든 재료는 영어가 아닙니다. 이 wikipedia link 일 수 있습니다.

    관계 대신 관계 테이블에 이름을 저장

    relation_id (int auto increment primary key) 
    id_one (int) 
    id_two (int) 
    ... 
    

    , 당신은 ID를 저장합니다.

    관련 문제