2010-04-15 2 views
2

나는 게임에 관한 데이터를 보유하고있는 게임 테이블을 가지고있다. 그런 다음 뉴스에 대한 데이터를 보유하고있는 다른 테이블.미래의 레코드를 위해 하나의 테이블을 다른 테이블과 관련시키는 방법

지금까지 그렇게 좋았습니다.

처음에는 game_news에 대한 접합 테이블을 만들려고 생각했기 때문에 뉴스를 게임에 연결할 수있었습니다.

이 방법은 게임이 존재할 때 의도 한대로 작동합니다. 따라서 뉴스를 삽입 할 때마다 접합 표를 사용하여 게임과 관련시킬 수 있습니다.

그러나 게임에 대한 뉴스가 있지만 게임이 게시되지 않고 존재하지 않는 경우가 있습니다.

제 질문은 그렇습니다. 게임 기록을 만들 때이 뉴스를 특정 게임과 관련시키는 방법이 있습니까?

가장 좋은 방법은 무엇입니까? 어떤 아이디어?

답변

2

연결 테이블이 있습니다. 뉴스 기사가 하나 이상의 게임에 관한 것이라면, 당신은 그것을 필요로합니다. 아직 존재하지 않는 게임을 처리하려면 행을 삽입하고 현재 알고있는 모든 정보 (뉴스 기사의 내용 일 수도 있음)를 포함하고 아직 릴리스되지 않았 음을 나타내는 상태 열이 있어야합니다. 아직 또는 소문 해제되지대로 등이 게임을 표시 할 수 있습니다

는 다음과 같이 최대 테이블을 설정합니다

Games 
GameID   int   not null auto increment PK 
GameStatus  char(1)  not null "P"=published, "N"=not released yet, "R"=game is only a rumor 
GameReleaseDate date   null 
GameName   varchar(...) not null 
GameDescription... 
... 

News 
NewsID  int    not null auto increment PK 
NewsTitle varchar(...)  not null 
... 

GameNews 
GameNewsID int auto increment PK 
GameID  int FK to Games.GameID 
NewsID  int FK to News.NewsID 

를이 설정을 사용하면 하나의 뉴스 항목과 관련된 여러 게임을 할 수 있습니다. 각 게임을 뉴스 행에 연결하기 위해 모든 적절한 GameNews 행을 삽입하기 만하면됩니다.

아직 게임이 게시되지 않은 경우 게임의 행을 상태 "N"또는 "R"(또는 이와 비슷한 내용)로 만들고 GameNews 테이블을 사용하여 뉴스에 연결할 수 있습니다 게시 된 게임의 경우 Games 내의 모든 필드에 최대한 많은 정보를 입력하고 더 많은 정보를 업데이트 할 수 있습니다. 결국 게임에서 게임 정보가 완성되고 (게임이 게시 된 후) 뉴스의 소문 일 때도 모든 뉴스 행에 연결됩니다.

제가 말하고자하는 것에 대한 아이디어를 제공하기 위해 "소문"게임에 대한 데이터가 시간이 지남에 따라 어떻게 생겼는지에 대한 샘플이 있습니다 (이는 단순한 예이며 뉴스 당 여러 게임이없는 행입니다) :

data as of 1/1/2010 
    Games GameID GameStatus GameReleaseDate GameName 
      1234 "R"   1/1/2012   "God of War 4" 
    News  NewsID NewsTitle 
      543  "Future Of Games" 
    GameNews GameNewsID GameID NewsID 
      768   1234 543 

data as of 4/1/2010 
    Games GameID GameStatus GameReleaseDate GameName 
      1234 "R"   1/1/2012   "God of War 4" 
    News  NewsID NewsTitle 
      543  "Future Of Games" 
      544  "Interview with John Hight" 
    GameNews GameNewsID GameID NewsID 
      768   1234 543 
      769   1234 544 

data as of 11/20/2010 
    Games GameID GameStatus GameReleaseDate GameName 
      1234 "N"   12/31/2011   "God of War IV" 
    News  NewsID NewsTitle 
      543  "Future Of Games" 
      544  "Interview with John Hight" 
      545  "God of War Expected Next Year" 
    GameNews GameNewsID GameID NewsID 
      768   1234 543 
      769   1234 544 
      770   1234 545 

data as of 8/15/2011 
    Games GameID GameStatus GameReleaseDate GameName 
      1234 "N"   12/01/2011   "God of War IV" 
    News  NewsID NewsTitle 
      543  "Future Of Games" 
      544  "Interview with John Hight" 
      545  "God of War Expected Next Year" 
      546  "Retailers Get Ready For New Games" 
    GameNews GameNewsID GameID NewsID 
      768   1234 543 
      769   1234 544 
      770   1234 545 
      771   1234 546 

data as of 1/1/2012 
    Games GameID GameStatus GameReleaseDate GameName 
      1234 "P"   12/01/2011   "God of War IV" 
    News  NewsID NewsTitle 
      543  "Future Of Games" 
      544  "Interview with John Hight" 
      545  "God of War Expected Next Year" 
      546  "Retailers Get Ready For New Games" 
      547  "God of War IV Review" 
    GameNews GameNewsID GameID NewsID 
      768   1234 543 
      769   1234 544 
      770   1234 545 
      771   1234 546 
      772   1234 547 

2012 년 1 월에 당신이, 그것은 완전하고 검토 Games.GameID = 1234 링크 볼 것 News.NewsID = 543 보는 것 인 경우에도 News.NewsID = 543 기사는 전쟁의 신의 "소문"곧 나오는 버전에 관하여이다. 이 모든 작업은 이전 News 또는 GameNews 행을 변경하지 않고 완료되었습니다.

1

가장 간단한 대답은 뉴스에서 게임까지 외래 키를 갖는 것입니다. 아직 존재하지 않는 게임에 대한 뉴스를 작성하는 경우 게임 테이블에 스텁 레코드를 만드십시오. 원하는 경우 플래그를 지정할 수 있습니다. 게임을 추가하면이 스텁 레코드가 사라집니다.

2

당신은 3 가지 옵션이 있습니다 - 게임이 출시되지 않았는지 여부를 말하기 위해 '게임'테이블에 플래그를 설정하고 게임이 출시되지 않은 경우 이름 만 표시 할 수 있습니다 (또는 심지어 그렇게 표시되지 않음).

다른 것은 게임 항목을 추가하고 링크 한 다음 뉴스 항목을 편집하는 것입니다. 게임을 추가하기 전에 고유 한 ID가 무엇인지 알 수 없기 때문입니다.

제 3의 UNRECOMMEDED 옵션은 기본 키 대신 게임 이름을 통해 링크하는 옵션입니다. 따라서 뉴스 테이블에 game_name이라는 열이 있고 그 방법으로 테이블을 연결합니다. 그러나 잘못 입력 한 경우 옵션 1 또는 2와 거의 비슷하지 않습니다.

1

두 개의 외부 키를 접합 테이블에 두는 것이 좋습니다. 외래 키는 존재하는 것을 참조합니다. 이를 시행하는 것을 "참조 무결성"이라고합니다. 존재하지 않는 항목에 대한 참조를 허용하는 것은 혼돈의 길입니다.

아직 데이터베이스에 존재하지 않는 게임에 대한 뉴스 기사를받는 경우 기본적으로 두 가지 선택 사항이 있습니다. 게임 테이블에 게임을 추가 한 다음 접합점 테이블에 게임에 대한 참조를 추가합니다. 또는 기사와 게임의 관계를 당분간 생략하십시오.

+0

나는 관계를 생략 할 생각을했습니다. 나에게 가장 좋은 방법 인 것 같습니다. 그러나 2 년 후에 창안 될 God of War 4에 대한 많은 뉴스 기록을 작성한다고 가정 해보십시오. 게임이 출시 된 몇 년 동안 게임이 만들어 지지만 게임과 관련된 레코드를 어떻게 알 수 있습니까? 아마 일부 태그 시스템? 나는 정말로 확신하지 못한다. – Sinan

1

"그러나 게임에 대한 뉴스가 있지만 게임이 게시되지 않고 존재하지 않는 경우가 있습니다."

"존재"의 의미에 대해 생각해보아야합니다. 무언가가 존재하지 않는다면, 그 기간과 관련된 것은 없습니다.

"귀하의 비즈니스 현실이"기존 및 기존의 것으로 알려져 있지만 "기존에 있지만 개인적으로 만 공개적으로 알려지지 않은"차이점을 포함하는 경우 모델은 해당 사실을 인정하고 다시 인정해야합니다.

'존재하지만 공개적으로 공개되지 않는'정보에 정보를 연결하는 것은 완벽하게 가능합니다. 존재하지 않는 것에 정보를 관련시키는 것은 불가능합니다.

관련 문제