2011-11-29 2 views
2

나는 대학 뉴스 조직을위한 블로그를 만들고있다. 각 게시물은 여러 참여자와 여러 제목이 포함 된 전체 쇼를 대표합니다.대표 뉴스 내 병합

예를 들어, 후 세 뉴스 자신의 제목 이야기, 각 일부 참여자 각각이있을 수 있습니다

  1. "이야기 1"(ID1)에 의해 (ID2)
  2. "스토리 2 (ID4)에 의해 "에 의해 (ID3)
  3. "스토리 3 "및 (ID5)

그래서 각 게시물에 대한 각각의 이야기에 대한 인덱스 (1, 2, 3 ...)이있을 것 , 제목에 대한 VARCHAR 및 기여자를 나타내는 ID (세부 사항은 sto 임) 다른 "참여자"테이블에 빨간색으로 표시됩니다. 문제는 내가 얼마나 많은 이야기가 있을지, 또는 이야기 당 얼마나 많은 기여자가 있을지 모른다는 것입니다. ~ 3에서부터 최대 6까지 다양 할 수 있습니다. 앞으로 우리 쇼가 확장 될 경우 6 개 이상의 게시물까지 확장 할 수있는 기능을 원합니다.

이 구조를 mySQL 열에서 간결하게 나타내려고하지만이 작업을 수행하는 방법을 잘 모르겠습니다. 한 가지 해결책은 각각의 개별 스토리에 대한 세부 정보를 저장하기 위해 다른 mySQL 테이블을 만드는 것이지만, 그 번거 로움을 피하기를 원합니다. 이상적인 해결책은 필자가 어떻게 든 mySQL 열에 "배열"을 만들 수 있다면 (각 스토리별로) 인덱스, 문자열 및 기여자가 누구인지 표시하는 다중 ID를 저장할 수 있다는 것입니다.

이것이 가능합니까 아니면 각 스토리를 추적하기 위해 새 테이블을 만들어야합니까?

답변

1

열을 사용하지 마십시오. 테이블을 사용하십시오. 그것은 성능을 전혀 해치지 않는 간단한 InnoDB 테이블 일 수 있습니다. 조합 된 기본 키 (story_id, contributor_id)을 정의하고 해당 테이블에 모든 컨트 리뷰 션을 삽입하십시오.

질문에서 이름을 M : N 테이블이라고 부릅니다. 거기에 가지 마라. 그것은 매우 나쁜 일이며 관계형 데이터베이스에서는 거의 불가능하다.

0

미래의 가슴을 보호하십시오. 여분의 표를 만듭니다. [Stories]가 [Contributors]와 다 대다 관계를 가지고있는 [Stories]와 일대 다 관계가있는 [Posts] 테이블입니다.

0

기여자 ID 또는 스토리 ID의 쉼표로 구분 된 문자열 값을 하나의 열에 저장할 수 있지만, 정확히 어떻게 관련시켜 줍니까? 이 경우 가장 좋은 방법은 배열의 '배열'로 만드는 것이고, 여기서 주 문자열은 쉼표로 묶인 문자열 쌍으로 구성됩니다. 그래서 (제 생각에는 괜찮습니까?) 완전히 필요하지 않는 한 (이 시점에서 하나의 인스턴스를 생각할 수 없다면) 사용을 피할 것입니다 ...

그래서 관계 테이블을 만드십시오.

-- a story may have multiple contributors 
CREATE TABLE story_contributor_rel (
    story_id INT NOT NULL 
    , contributor_id INT NOT NULL 
) 

-- a post may have multiple stories 
CREATE TABLE post_story_rel (
    post_id INT NOT NULL 
    , story_id INT NOT NULL 
) 

을 아니면 조금 속임수, 그러나 나는이에 대해 권하고 싶습니다 : 그냥 생각에 하나의 접근 방식을 설명하기 위해 (!) :

-- a less-normalized way 
CREATE TABLE post_relationships (
    post_id INT NOT NULL 
    , story_id INT NOT NULL 
    , contributor_id INT NOT NULL 
) 

이 그냥 간단한 방법을 제공합니다. 자연스럽게 추가 indentity 열 및/또는 적절한 인덱싱 및 기본 키 설정을 원할 수 있습니다. 그러나 이것은 내가 더 잘 운전하고있는 요점을 설명 할 수있는 방법 일뿐입니다.

이것을 너무 상상해보십시오.논리적 인 열에 모든 관계를 넣으려면 응용 프로그램없이 누군가가 테이블에서 무슨 일이 일어나고 있는지 쉽게 이해할 수 없습니다. 테이블 구조에 논리를 지정하지 않고 관계 추적 (관계 테이블을의 L하는)을 적절히 설정하면 투명하게 나타납니다. 이 테이블과 사람을 한 번 봐 보면 이해할 수있을만큼 오래 걸리지 않을 것입니다.

그건 제 의견입니다. :) 건배!