2009-09-22 4 views
0

많은 사람들의 이름이 들어있는 MYSQL 데이터베이스가 있습니다. 데이터베이스의 각 사용자는 first, last, middle, maiden 또는 nick이라는 이름 유형 중 하나 또는 모두를 가질 수 있습니다. 나는이 데이터베이스를 검색하여 사람들이 데이터베이스에 있는지 확인하는 방법을 사람들에게 제공하고자합니다.이름 데이터베이스 검색

사람들 이름 데이터베이스를 검색하는 데 적합한 선반 제품이 있습니까?

+0

...하지만 SQL의 요점이 아닌가요? 나는 당신의 질문을 이해하지 못합니다. –

답변

1

약간의 창의력으로, MySQL은 사용자가 필요로하는 것만 수행합니다 ... 다음은 몇 가지 아이디어를 제공합니다.

 
Your table: (I call it tblPersons) 
    PersonID (primary key of sorts) 
    First 
    Last 
    Middle 
    Maiden 
    Nick 
    Other columns for extra info (address, whatever...) 

는 그대로 테이블을 유지하고, 이름과 관련된 각 컬럼에 인덱스를 구축함으로써, 다음 쿼리는 이름이 어떻게 든 특정 이름과 일치하는 모든 사람을 찾는 비효율적이지만 그럴듯한 방법을 제공합니다 . (예 잭) 응용 프로그램이 하나 개의 이름 만 값이 모든 다양한 이름 종류 모색하는 검색에 바인딩되지 않는다는 것을

SELECT * from tblPersons 
WHERE First = 'Jack' OR Last = 'Jack' OR Middle = 'Jack' 
    OR Maiden = 'Jack' OR Nick = 'Jack' 

참고. 또한 사용자는 이름 'John'및 성 'Lennon'과 직업 '아티스트'(db에 해당 정보가 저장되어있는 경우)를 검색하기위한 특정 조건 집합을 입력 할 수 있습니다.

또한 이 단일 테이블 접근 방식을 사용하는 경우에도 응용 프로그램의 기능 중 하나는 사용자가 "given"이라는 이름이 (Paul, Samantha 또는 Fatima와 같은)인지 인지 여부를 검색 논리에 알릴 수 있습니다. " (예 : Black, McQueen 또는 Dupont). 이것의 주된 목적은 Lewis 나 Hillary와 같은 이름을 가질 수 있고, 질의에 좀 더 구체적으로 지정함으로써, 최종 사용자는 SQL을 통해 관련성이없는 많은 레코드를 자동으로 제거 할 수 있다는 것입니다 . 보다 효율적인 대안의 데이터베이스 레이아웃과 관련하여 이러한 종류의 기능으로 돌아갈 것입니다.

"이름"테이블 소개. tblPersons 테이블에 다양한 이름을 저장하는 대신 (또는 추가로) 추가 테이블을 도입 할 수 있습니다. 그것을 tblPersons와 연결하십시오.그들은 이름을 가지고 (그러나 특정 이름이없는 경우, 예를 들어 몇 사람이 닉네임을 가지고

tblNames 
    PersonID (used to relate with tblPersons) 
    NameType (single letter code, say F, L, M, U, N for First, Last...) 
    Name 

우리는 다음 tblNames에서 ONE 각 개인에 대한 tblPersons에 기록하지만, 많은 기록이있을 것이다, tblNames에 해당 레코드가 필요 없음).

그런 다음 쿼리는

SELECT [DISTINCT] * from tblPersons P 
JOIN tblNames N ON N.PersonID = P.PersonID 
WHERE N.Name = 'Jack' 

는 이러한 레이아웃/구조가 더 효율적이 될 것입니다 될 것입니다. 또한이 쿼리는 단지에 추가하여, 쉽게 "주어진"대 "성"기능을 제공하는 자체를 빌려 것 WHERE 절

 AND N.NameType IN ('F', 'M', 'N') -- for the "given" names 
    (or) 
     AND N.NameType IN ('L', 'U', 'N') -- for the "surname" types. Note that 
     -- we put Nick name in there, but could just as eaily remove it. 
이 방법의 또 다른 관심은 그것의 이름을 다른 종류의 저장 수있는 것입니다

예를 들어 SOUNDEX 형식의 모든 이름을 자신의 NameType (이름) 아래에 추가하여 철자가 대략적인 경우에도 쉽게 이름을 찾을 수 있습니다.

마침내 또 다른 개선 에게 주어진 이름 (베드로 피트, 요한 잭, 윌리엄 등을위한 빌)의 가장 일반적인 약어를 포함하는 별도의 조회 테이블을 소개 할 수 있고, (검색 목적으로을이 를 사용하는 표시 값을 제공하는 데 사용되는 이름 열은 원본 데이터에 제공된대로 유지되지만 검색 수준에서 추가 조회/정규화로 인해 회수가 증가합니다.

+0

이것은 실제로 데이터 구조화 방법과 정확히 일치합니다. 같은 문자열에 대해 여러 유형을 검색하는 것이 쉽지 않을 것이라는 것을 깨달았습니다. –

0

데이터베이스를 검색하려면 제품을 구입할 필요가 없으며 쿼리를 처리 할 수있는 데이터베이스가 있어야합니다.

독자적인 쿼리를 실행 해 보았습니까? 예를 들면 : 당신이 어떤 쿼리를 실행하려고했습니다 경우

SELECT * FROM names WHERE first_name='Matt' AND last_name='Way'; 

(I 스키마의 모습을 상상 해요), 어떤 문제가 당신은 당신이 다른 솔루션을 시도 할 수가 발생 했습니까?

스키마는 어떤 모양입니까?

몇 개의 행이 있습니까?

데이터 인덱싱을 시도한 적이 있습니까?

질문에 대한 답변을 제공 할 수있는 몇 가지 정보를 제공해주십시오.