2012-04-08 1 views
2

웹 사이트 용 MySQL 데이터베이스를 모델링하고 있습니다.하나의 SQL Comlumn에 여러 요소를 저장하는 좋은 방법은 무엇입니까?

나는 이제 '사람들' 테이블을 만들고 어떤 테이블이 이 필요한지 결정하고 있습니다.

이름 열,
을 가지고사람과 나는 별칭에게 다양한 규칙의 이름이 포함 열을 추가 할. 예

는 이름이 사람은 '마이클 잭슨는'M. 잭슨 ' 잭슨, M' 또는 'M.J.'같은 별명를 가질 수있다.

어쨌든 각 사람의 별칭 수가 다를 수 있습니다. 데이터 형식은 합리적 일 수 있습니까?

대 Varchar별명 필드를 확인하고 거기에 모든 별칭을두고, 그들은 PHP에서 분할?

또는 별칭 PHP에서 동적으로 별칭을 만드시겠습니까? DB에 넣는 대신에?

나는 좋은 추천을 기다리고 있습니다. 감사합니다!

답변

2

새 테이블을 만들고 aliases이라고 부릅니다. 이 테이블은 테이블 people과 다 대 일 관계 여야합니다.

Tables relation

aliases 상위 테이블 persons (즉 people.personId 참조하는 열 aliases.personId가)

다음 데이터가 Joins를 사용하여 검색을 외부 키를 가져야한다.

참조 :

Cardinality (data modeling)

Foreign key

Join (SQL)

그리고 마지막으로 가장 중요한 Normalization

4

정규화 된 방법은 사람 ID 필드와 별칭 필드가있는 별도의 별칭 테이블을 만들고 다 대일 관계를 만드는 것입니다. 또 다른 방법은 모든 별칭이있는 VARCHAR 필드를 PHP로 분할하는 것입니다. 별칭을 검색 할 필요가 없으면 정상적으로 작동하지만 정상화 된 버전은 훨씬 깨끗합니다.

+0

+ 1 : 비정규 화는 이전이 아닌 성능 문제가있을 때 성능 고려 사항 *입니다. –

+0

일반적으로 값을 어떻게 사용할 것인지 결정에 반영해야합니다. – Leigh

1

이 별칭에 대한 다른 테이블을 사용하는 것이 아마 최선의 방법이지만 다른 방법 경우가 하나의 테이블을 사용하려고합니다.

별도의 이름과 함께 # 별칭 당신이 얻을 폭발 사용할 수있는 PHP 코드에서 하나 개의 컬럼에

마이클 잭슨 # M.Jackson

를 넣어 이름과 별명

$fullname = "Micheal Jackson#M.Jackson"; 

$each = explode('#' , $fullname); 
$each[0];//Micheal Jackson 
$each[1];//M.Jackson 
관련 문제