최근 몇 가지 질문에서 열 이름을 지정하는 방법에 대해 설명하고 있지만 열 이름에 외래 키 및 기본 키의 개념을 포함시키는 개념을 발견 한 것에 놀랐습니다. 그건 내가 계획의이 종류를 사용하는 데이터베이스 시스템에서 일한 적이 고백해야열 이름에 기본/외래 키 속성을 지정하는 이유
select t1.col_a, t1.col_b, t2.col_z
from t1 inner join t2 on t1.id_foo_pk = t2.id_foo_fk
이고, 나는 이점이 무엇인지 궁금하네요. 필자가 보았던 방식으로 시스템의 N 개의 주 테이블을 배웠 으면 이러한 테이블을 사용하여 몇 가지 순서로 더 많은 요청을 작성할 수 있습니다.
개발 과정에서 생산성을 높이려면 어떤 테이블이 중요한 테이블이고 간단한 지류인지 알아야합니다. 많은 양의 컬럼 이름을 메모리에 위탁하고 싶을 것이다. 그리고 기본 작업 중 하나는 두 테이블을 함께 결합하는 것입니다. 학습 노력을 줄이기 위해 할 수있는 가장 쉬운 방법은 두 테이블의 열 이름이 동일한 지 확인하는 것입니다 :
select t1.col_a, t1.col_b, t2.col_z
from t1 inner join t2 on t1.id_foo = t2.id_foo
내가 개발자로서, 당신은 많은 것을 상기 할 필요가없는, 멋 부리다 어느 컬럼이 외부 키이고 아무것도 아닌 기본 키인지에 대한 정보를 제공합니다. 호기심이 있다면 스키마를 살펴 보는 것만으로도 충분합니다. 무작위로 볼 때
tx inner join ty on tx.id_bar = ty.id_bar
... 어느 것이 외래 키인지 아는 것이 중요합니까? 외래 키는 데이터베이스 엔진 자체에서만 중요하므로 참조 무결성을 보장하고 업데이트 및 삭제 중에 올바른 작업을 수행 할 수 있습니다.
어떤 문제가 해결 되었습니까? (나는 이것이 토론 할 수있는 초대장이며, 그렇게 할 자유가 있다고 생각한다. 그러나 동시에 나는 이다.은 진실로 뭔가를 놓친 답을 찾고있다.
는 않을 것 Invoice.InvoiceCustomerUserName이 될까요? 그리고 이것은 타입 태그보다 더 나쁠 위험이 있습니다 ... Invoice.UserName = Customer.UserName이 나에게 충분히 명확하게 보입니다. –
죄송합니다. 이것은 끔찍한 행동입니다. 단순히 무시 무시한. 테이블 별칭의 필요성을 없애주는 일종의 "영리함"처럼 보입니다. 테이블 이름 앞에 접두어가 붙은 T_와 C_ (보기 및 색인에 접두어가 너무 붙어있는 곳)와 거의 비슷합니다. –
그것은 단지 중복입니다.조인 할 때 테이블 이름을 항상 참조해야합니다. 또한 사용자 이름은 좋은 기본 키가 아닙니다. 예를 들어, CustomerUserName을 갖는 송장은 UserName을 갖는 송장보다 명확하지만 모두 잘못되었습니다. ..JOIN user ON invoice.userid = user.userid가 매우 명확합니다. – gregmac