2012-08-29 2 views
2

우리는 employees, companiesaddresses 테이블을 가진 MySQL 데이터베이스를 가지고 있습니다. 설정은 다음과 같이 작동합니다. 직원 및 회사마다 ID가입니다. 두 테이블에 있기 때문에 직원은 id = 1을 가질 수 있고 회사는 id = 1을 가질 수 있습니다. 둘 다 여러 개의 주소를 가질 수 있습니다. 모든 것은 조금이다상수가있는 두 개의 테이블에 연결하는 MySQL 외래 키?

element_id 
element_type_id 

element_type_id 1 = 개인 또는 2 = 기업

중 하나입니다 :

지금 주소 테이블은 회사 또는 직원에게 중 하나를 연결하는 두 개의 열이 있습니다 더 복잡하고 더 많은 테이블이 있지만 그 개념을 설명합니다. 이제 Entity Framework 사용을 시작하고이를 위해 외래 키와의 관계를 정의해야합니다.
하지만 우리가 현재 가지고있는 설정으로는 거의 불가능합니다. 그렇습니까? 주소 표가 사람과 회사와 어딘지로 결합해야하므로 ....

아이디어가 있으십니까?

+0

데이터베이스 스키마를 변경할 수 있습니까? –

+0

우리는 이론적으로 할 수 있습니다. 하지만 제가 말했듯이, 그것보다 조금 복잡합니다. 이 접근법은 db에서 광범위하게 사용되어 왔고 많은 상황에서 유용했습니다. 예를 들어 우리에게는 과제가 있습니다. 이 작업은 회사, 직원, 직업, 주문 또는 거래를위한 것일 수 있습니다. 작업을 필요로하는 모든 요소에 추가 할 수있는 것과 똑같은 WebForm 컨트롤입니다. – Remy

답변

0

이 개념은 다형성 연관으로 알려져 있습니다. 내가 한마디로 question에 대해 물었습니다. 왜냐하면 내가 비슷한 소리를 내고 싶었던 비슷한 데이터 구조를 가지고 있었기 때문입니다. 이 질문의 측면에서 귀하의 Address은 댓글 테이블과 일치하고 EmployeeCompany 사람과 함께

답변이 우수했습니다. 당신이 스키마를 바꿀 수 있다면 나는 확실히 그것을 갈 것이고 그 접근법을 사용할 것이다.

스키마를 변경할 수없는 경우 EF 모델에서 항상 Address 클래스의 하위 유형을 지정하고 element_type_id을 식별자 컬럼으로 사용하십시오. 하위 유형 EmployeeAddressCompanyAddress을 작성합니다. 여기에서 Employee은 전자를 나타내고 후자는 Company입니다. 그러나 "모든 것이 조금 복잡합니다"라고해서 귀하의 상황에서 이것이 가능할 지 확신 할 수 없습니다.

0

당신은 이미이 개념이 관계형 데이터베이스에 적합하지 않다는 자신감을 나타 냈습니다. 잘못된 것은 아니며, MySQL과 다른 모든 것은 그것을 지원하지 않습니다. 정규화 된 레이아웃이 아니므로 데이터베이스 엔지니어가 나쁜 습관으로 간주 할 수 있습니다.

두 개의 추가 테이블 인 employee_adresses와 company_addresses를 작성하여 관계와 주소를 구분하는 방법에 대해 생각해보십시오. 각 테이블에는 회사와 주소, 직원 및 주소와의 관계가 있습니다. 이 방법을 사용하면 한 회사와 많은 직원에게 사용되는 하나의 주소를 얻을 수 있습니다. 이는 좋은 것일 수 있습니다 (정규화 된 구조).