2017-11-07 20 views
0

저는 SQL에 익숙하지 않습니다. 여기는 저의 첫 번째 게시물입니다. 나는 많은 비슷한 대답을 보았지만 나의 질문에 결론을 내릴 수는 없었다. 다음은 게임 데이터베이스에 대해 수행하려는 작업의 예입니다.많은 관계형 데이터베이스

플레이어 캐릭터 정보가 저장된 테이블이 있습니다. 모든 가능한 상태 영향이 유지되는 다른 테이블이 있습니다. 첫 번째 테이블에있는 문자 항목의/all/none을 두 번째 테이블의 상태 항목 중 하나 또는 모두에 연결할 수있는 관계를 만드는 방법을 파악하려고합니다. 필자의 연구에 따르면 아마도 세 번째 테이블이 필요하고 복합 기본 키 및/또는 대리 키를 사용해야 할 수도 있습니다.

처음으로 포스터 정말 미안 해요. 올바르게하지 않으면. 누구든지이 문제를 어떻게 생각할 수 있는지에 대한 단서를 줄 수 있습니까? 감사.


여기는 응답을 기반으로 한 업데이트입니다. 나는 내가 성취하고자하는 일을하는 것처럼 보입니다. 다음은 코드입니다.

create table characters (
    char_id int primary key auto_increment, 
    name varchar(25) 
    ); 

    create table health_status (
    status_id int primary key auto_increment, 
    stat_name varchar(15) 
    ); 

    create table char_status (
    char_id int, 
    status_id int, 
    primary key (char_id, status_id) 
    ); 

    insert into characters (name) values ('Godzilla'); 
    insert into characters (name) values ('King Kong'); 
    insert into characters (name) values ('Mecha-Dragon'); 
    insert into characters (name) values ('Chris Hanson'); 
    insert into characters (name) values ('Journey'); 
    insert into characters (name) values ('Lou Diamond Phillips'); 
    insert into characters (name) values ('RedHot'); 

    insert into health_status (stat_name) values ('Bleeding'); 
    insert into health_status (stat_name) values ('Shaken'); 
    insert into health_status (stat_name) values ('Frightened'); 
    insert into health_status (stat_name) values ('Petrified'); 
    insert into health_status (stat_name) values ('Poisoned'); 
    insert into health_status (stat_name) values ('Slowed'); 
    insert into health_status (stat_name) values ('Rushed'); 
    insert into health_status (stat_name) values ('Endowed'); 

    insert into char_status (char_id, status_id) values (1, 1); 
    insert into char_status (char_id, status_id) values (1, 3); 
    insert into char_status (char_id, status_id) values (1, 6); 
    insert into char_status (char_id, status_id) values (2, 2); 
    insert into char_status (char_id, status_id) values (2, 4); 
    insert into char_status (char_id, status_id) values (3, 7); 
    insert into char_status (char_id, status_id) values (6, 8); 
    insert into char_status (char_id, status_id) values (7, 2); 
    insert into char_status (char_id, status_id) values (7, 7); 

    select characters.name, health_status.stat_name 
    from characters 
    left join char_status on characters.char_id = char_status.char_id 
    left join health_status ON health_status.status_id = 
    char_status.status_id; 

세 가지 질문이 있습니다. 누구든지 이것이 정리 될 수있는 방법이나 내 목표를 달성하기위한 더 좋은 방법을 본 적이 있습니까? 또한 테이블 char_status에 복합 PK를 사용하면 실제로 아무 것도 유용하지 않습니까? 마지막으로 문자 이름을 한 번만 나열한 후 모든 관련 상태가 나열된 쿼리를 사용하여 출력을 구성 할 수 있습니까? 아니면 다른 언어에 대해이 작업을 수행 할 수 있습니까? 모두의 도움에 감사드립니다! 당신은 당신이 더 새로운 테이블을 만들고 그것으로 데이터를 입력 할 필요가 말하는 당신의 구조를 기반으로

+0

당신이 MySQL을 사용하는 것처럼보고 값을 추가하려면이 쿼리를 실행, 난 당신이 MySQL의 워크 벤치 같은 것을 시도하는 것이 좋습니다.이를 통해 드래그 앤 드롭을 통해 이러한 관계를 만들 수 있으며 이러한 관계형 모델링을 익히는 데 도움이됩니다. – harandk

+0

안녕하세요. 정보 모델링 및 관계형 데이터베이스 설계에 관한 입문 교과서를 읽어야합니다. 그게 당신의 질문에 대한 질문이지만, 맞춤식 튜토리얼 예제와 함께. 어떤 대답이 어떻게 정당화 될 수 있습니까? 당신이 아무것도 모르는 경우, 처음부터 설명하고 정당화해야합니다. 특정 사양에 대한 특정 코드 나 디자인에 대해 특정 질문이있을 때는 질문을하십시오. – philipxy

답변

1

. **

당신이 기본 키에있을 필요가 TABLEA와 TableB의 사이를 연결하기 위해서는 다른 하나에서의 참조 및 그 참조도

**. 다 대다 관계는 tableA가 tableB의 많은 요소에 의존하고 그 역도 마찬가지입니다.

상황에 따라 먼저 테이블을 정규화해야 할 수 있습니다.

은 또한 당신이 당신의 연구에 발견 one-many and many-many etc..

1

를 보라 Normalization_tuorial 다음에서보세요

에서 "ID"(주 필드) 개최 2 개 필드와 세 번째 테이블을 생성 당신이 많은 사람들과 많은 관계를 맺고 싶은 그 2 개의 테이블. ...

CREATE TABLE `many_to_many` (`information_id` INT(11) NOT NULL , `status_id` INT(11) NOT NULL , PRIMARY KEY (`information_id`, `status_id`)) ENGINE = MyISAM; 

2 개의 필드에 의존하는 PRIMARY KEY에 부담을 지불하십시오. 모든 많은 status_id 관계를 information_id에 대한

이제,

및 status_id 많은 information_id 관계를 추가 할 수 있습니다. 첫 번째 시도에 대한

, 그것은

INSERT INTO `many_to_many` (`information_id`, `status_id`) VALUES (1, 1), (1, 2), (2, 1), (2, 2);