2013-11-03 2 views
0

나는 C#에서 .net을 사용하여 사용자가 일부 프로젝트를 열 수있는 웹 응용 프로그램을 만들었으며 모든 프로젝트에서 맵의 항목에 대한 MYSQL의 맵과 테이블이 데이터에 포함되어 있습니다. (모든 사람은 같은 테이블을 가지고있다). 나는 두 가지 옵션 사이에 SQL 구조를 어떻게 구축해야하는지 궁금하다. 1) 사이트에 등록한 모든 사람이 자신에게 새 데이터베이스를 가져 오게된다. 2) 모든 ID가 고유 ID를 가지며 테이블의 모든 항목에이 ID에 대해 더 많은 열이 있으며이 항목 만 ID로 선택합니다.데이터베이스가 필요합니까? 또는 동일한 데이터베이스에있는 모든 사용자

무엇이 더 효과적일까요?

+2

불필요하게 번잡하고, 확실히 드문 것 같다. 언급하지 않은 옵션 1과 함께 할 실제 이유가없는 한, 옵션 2는 확실한 선택입니다. – David

+0

옵션 2의 유일한 관심사는 데이터베이스 크기와 성능입니다. 하지만 보통 하드웨어를 더 많이 사용하고 영리한 색인을 생성하면 극복 할 수 있습니다. 그러나 이는 보장되지 않습니다. –

답변

1

이미 언급 된 다른 답변자는 각 사용자에 대해 데이터베이스를 만드는 것이 매우 드뭅니다. 그러나 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?

0

하나의 데이터베이스. 고유 ID. 거의 모든 저장 프로 시저 또는 SQL 문에는 "WHERE UniqueID ="가 포함됩니다.

관련 문제