이미 언급 된 다른 답변자는 각 사용자에 대해 데이터베이스를 만드는 것이 매우 드뭅니다. 그러나 user_id를 모든 열에 곧바로 추가하는 것은 좋은 아이디어가 아닙니다.
이상적으로는 서로 다른 데이터 (사용자,지도, 사례의 항목) 간의 관계를 적절히 설계하고 올바른 색인 생성/키를 사용하여 유연하고 효율적인 스키마를 만들어야합니다.
예 디자인은 다음과 같습니다
CREATE TABLE user (
int id NOT NULL,
.... // user data fields will come here...
PRIMARY KEY(id)
) ENGINE = InnoDB;
CREATE TABLE map (
int id NOT NULL,
.... // map data fields will come here...
PRIMARY KEY(id)
) ENGINE = InnoDB;
CREATE TABLE item (
int id NOT NULL,
.... // item data fields will come here...
PRIMARY KEY(id)
) ENGINE = InnoDB;
CREATE TABLE map_has_item (
int map_id NOT NULL,
int item_id NOT NULL,
PRIMARY KEY (map_id, item_id),
FOREIGN KEY (map_id) REFERENCES map (id),
FOREIGN KEY (item_id) REFERENCES item (id)
) ENGINE = InnoDB;
CREATE TABLE user_has_map (
int user_id NOT NULL,
int map_id NOT NULL,
PRIMARY KEY (user_id, map_id),
FOREIGN KEY (user_id) REFERENCES user (id),
FOREIGN KEY (map_id) REFERENCES map (id)
) ENGINE = InnoDB;
디자인은 위의 당신이 당신의 응용 프로그램에 관련된 간단한 쿼리를 작성하는 데 도움이됩니다. 위의 색인을 사용하는 모든 쿼리도 빠릅니다.
또한 잠재적 인 기능 추가를 위해 충분히 유연 할 것입니다. 예를 들어, 다른 사용자가 다른 사용자의 맵에 기여할 수있게되는 경우, user_has_map 테이블에 권한/역할 열을 추가하고이 열을 적절하게 설정하여 새 행을 추가 할 수 있습니다.
위에서 정의한 외래 키를 개선하여 데이터 무결성을 보장 할 수 있습니다 (데이터베이스에서 의미 상 정확한 데이터를 보유 함). ON DELETE 및 ON UPDATE 트리거를 설정하여지도 또는 사용자가 데이터베이스에서 제거 될 때 정리를 단순화 할 수 있습니다. 당신은 아래의 링크를 따라 외부 키에 대해 자세히 알아볼 수 있습니다 :
특정 개체의 인스턴스에 대한 데이터베이스를 작성
http://dev.mysql.com/doc/refman/5.6/en/create-table-foreign-keys.html
Basics of Foreign Keys in MySQL?
불필요하게 번잡하고, 확실히 드문 것 같다. 언급하지 않은 옵션 1과 함께 할 실제 이유가없는 한, 옵션 2는 확실한 선택입니다. – David
옵션 2의 유일한 관심사는 데이터베이스 크기와 성능입니다. 하지만 보통 하드웨어를 더 많이 사용하고 영리한 색인을 생성하면 극복 할 수 있습니다. 그러나 이는 보장되지 않습니다. –