2012-04-06 3 views
4

여러 테이블이있는 MySQL 데이터베이스를 설정 중입니다. 테이블 중 일부는 이름이 같은 필드가 필요하며 반드시 같은 목적으로 사용되지는 않습니다.여러 테이블에 걸쳐 더 효율적인 데이터베이스 구조

예를 들어 name 필드와 name 필드가있는 category 테이블 등이있는 users 테이블이 있습니다.

는, 어떤 이점은 user_name는 이들과 같은 cat_name

별도의 테이블에 모두 사용하여 위의 예에서, 그래서 내가 이전에, 또는 필드 이름에 서문없이 하나까지이 설정을 본 적이

이 이 머리말 유무와 관계없이 데이터베이스를 구성하는 방법 조인을 사용하고 PHP를 통해 데이터를 호출 할 때 을 사용할 때 필드를 서로 덮어 쓰지 않게하려면 SELECT users.name AS username...을 추가해야한다는 것을 알고 있습니다. 그러나 한 방법을 다른 방법보다 효율적으로 사용할 수 있는지 확실하지 않습니다.

+0

"도메인 생성"을 지원하는 DBMS를 사용하는 경우 사용자 이름과 범주 이름이 동일한 도메인을 기반으로해야하는지 여부에 따라 사용자가 제기하는 데이터 관리 문제의 유형을 가장 잘 처리 할 수 ​​있습니다. 그리고 대답은 이름이 "XXX"인 사용자와 이름이 "XXX"인 카테고리가 동일한 것을 참조하는지 여부에 달려 있습니다. 여기서 문제는 형식이 아닌 의미론입니다. –

답변

0

정말 중요한 부분입니다. 나는 개인적으로 단지 name을 사용하는 접근법을 선호한다.

아무리주의해야 할 점은 SELECT * FROM ... 개의 검색어 (사용자가 아니어야하며 항상 명시 적으로 입력란을 선택)를 수행하면 잘못된 데이터를 선택할 수 있습니다.

+1

잘못된 데이터를 얻지 못하면 이름이 두 개 이상의 다른 테이블에 존재한다는 오류가 발생합니다. 따라서이 경우 별칭을 지정하고 반환 할 각 필드를 명시 적으로 정의해야합니다. – JonH

+0

예, 데이터베이스를 처음 만들 때이 문제가 발생했습니다. 그것은 어떤 오류도주지 않았습니다. 테이블을 결합 할 때 결과 배열은 구별하는 대신 변수 이름의 각 인스턴스에'$ query [ 'name']'값을 덮어 씁니다. – TH1981

1

귀하의 상점 또는 귀하의 취향에 따라 다릅니다. 더 나은 접두사는 없습니다. 개인적으로 나는 단지 이름으로 유지할 것입니다 : Users.NameOrders.NameProducts.Name은 모두 서로 다른 객체 유형을 가진 튜플을 포함합니다.

하루가 끝나면 일관성을 유지하고 싶습니다. cat_user_ 접두사를 선호하는 경우 디자인과 일관성을 유지하고 모든 개체 유형에이 접두어를 포함하십시오. 내게는 적다.

0

단점은 누구나 자연스러운 조인을 사용할 정도로 어리 석다는 것입니다 (당신은 이것이 좋지 않은 행동이라고 생각할 수 있지만 mysql이 허용하므로 그렇게 할 것인지 고려해야합니다). 그러면 해당 필드에 합류하게 될 수도 있습니다 우연히 같은 이름으로

+1

시간이 지남에 따라 실행되는 쿼리에서 나쁜 습관에 동의합니다. 자연 조인과 SELECT *는 테이블에 열을 추가 할 때 결정적이지 않습니다. 바아 워드. – gahooa

관련 문제