2009-11-17 6 views
1

저는 SQLite에 조금 익숙하며 데이터베이스 디자인에 약간의 딜레마가 있습니다. 나는 설명 할 것이다. 귀하와 귀하의 친구들이 인터넷에서 서로 다른 별명을 사용한다고 가정하십시오 (한 명당 둘 이상이 될 수 있음). 우리가 가진 것은 그 사람의 신분과이 사람이 사용하는 모든 닉네임들의 목록입니다. 이것은 큰 목록의 단일 항목입니다. 목표는 SELECT 문을 사용하여 지정된 닉네임을 포함하는 모든 항목을 가져 오는 방식으로 SQLite를 사용하여이 데이터를 저장하는 것입니다.SQLite - 동일한 데이터/열의 여러 항목을 선택하십시오

두 개의 열 (첫 번째 ID (기본 키)이되고 다른 하나는 CSV 형식의 닉네임을 포함하는 TEXT)로 테이블을 생성하려고 생각했습니다. 그러나이 예에서는 CSV에 저장된 별명을 검색하고 일치시키기 위해 select 문을 작성하는 방법을 모르겠습니다.

아이디어가 있으십니까?

+0

으로 온 추가, 문제 자체가 SQLite는 하나가 아니라 데이터베이스 여행 중의. SQLite는 여러 테이블을 지원하는 다른 적절한 데이터베이스만큼이나 유용합니다. 모든 것은 적절한 스키마로 시작됩니다. – MPelletier

답변

5

, 당신은

SELECT Name, Nickname FROM MyTable WHERE Nickname = 'Copper'; 

을하지만 강력 이름의 테이블, 그리고 닉네임 이름에 대한 참조를 갖도록 사용되는 별명에 대한 테이블을 갖는 제안 것입니다.

CREATE TABLE Users (
    UserId INTEGER PRIMARY KEY, 
    Name TEXT 
    ); 
CREATE TABLE Nicknames (
    NickNameId INTEGER PRIMARY KEY, 
    UserId INTEGER REFERENCES Users(UserId), 
    NickName Text 
    ); 
등 당신이 그들을 제거,이 제도는 당신에게 항목을 편집에 더 많은 제어를 줄 것이다 찾을 수

,

쿼리 그것에게 INNER JOIN 중 하나에 :

SELECT Users.Name, NickNames.NickName 
    FROM Users INNER JOIN NickNames ON User.UserId=NickNames.UserId 
    WHERE NickNames.NickName = 'Copper'; 

또는 중첩 된 쿼리

SELECT Users.Name 
    FROM Users 
    WHERE User.UserId IN (
    SELECT NickNames.UserId 
     FROM NickNames 
     WHERE NickNames.NickName = 'Copper'); 

둘은 (이 경우) WHERE 절. 그것은 을 작동하지만, 가난한 형태의 (그것은 아니에요 명확 INNER JOIN 등) :

SELECT Users.Name, NickNames.NickName 
    FROM Users, NickNames 
    WHERE User.UserId = NickNames.UserId 
    AND NickNames.NickName = 'Copper'; 
1

바로 다음 표가없는 이유 :

사람 (열 : person_id로, PERSON_NAME)

닉네임 (열 : nickname_id, 별명)

Person_Nickname (열 : person_id로, nickname_id)

그런 다음 Person에서 Person_Nickname으로, Nickname에서 Person_Nickname으로 외래 키를 작성합니다. 이것은 주어진 사람이 원하는만큼 많은 닉네임을 가질 수있게합니다.

다음

, 주어진 별명과 일치하는 모든 사람을 찾기 위해, 당신은 쓸 수 있습니다 :

  • 사용자
  • 별명

에서 :

SELECT p.person_name 
    FROM person.p 
    , nickname n 
    , person_nickname pn 
WHERE n.nickname = 'nickname of interest' 
    AND p.person_id = pn.person_id 
    AND n.nickname_id = pn.nickname_id 
1

당신은이 테이블이 필요 테이블 "사용자"는 ID, 이름, 사용자에 대한 기타 선택적 정보를 갖습니다. 테이블 "별명"에는 user_id, nickname이 있습니다.

1 대 다수의 협상입니다. 그런 다음 (사용자 ID를 사용하여) 이런 식으로 쿼리를 모든 사용자 별명의 목록을 구하는 방법

SELECT nicknames.nickname FROM nicknames WHERE nicknames.user_id=id 

을 당신이 할 수있는 구현 같은 적은 데이터베이스로 :이 개 필드
사용하는 하나 개의 테이블 (사용자, 닉네임). 그런 다음 당신은이 같은 쿼리 사용자와 관련된 모든 존의 별명 목록 (당신도 ID를 사용할 수 있습니다) 얻을 :

SELECT table.nickname FROM table WHERE table.user="john" 

csv로 접근 작동하지만 당신은 추가 당신의 자신의 함수를 구현해야합니다/제거/구문 분석 닉네임, 그리고 그것은 거의 확실하게 내가 설명 두 구현보다 느려질 것입니다. 여기에 우선 들어