2013-07-26 2 views
0

MySQL 기반 웹 응용 프로그램에 고객, 서비스 및 메모라는 세 개의 엔터티가 있습니다. 각 고객은 다른 사용자가 게시 한 여러 노트를 가질 수 있습니다. 마찬가지로 서비스는 여러 노트를 가질 수 있습니다. 쉬운 검색을 위해 모든 노트를 단일 테이블에 저장하고 싶습니다. 기본적으로이 테이블에 대한 삽입/업데이트보다 많은 쿼리가 있습니다.여러 엔터티가 포함 된 데이터베이스 모델링

Table: Customer 
id - integer 
name - varchar 
status - varchar 

Table: Service 
id - integer 
name - varchar 
status - varchar 
price - float 

Table: Note 
id - integer 
note - text 
author - integer 
type - varchar 
cdate - datetime 

나는이 테이블 사이의 관계 구축을 위해 두 가지 방법을 준비했습니다 :

Approach #1 
Table: CustomerNote 
id - integer 
customer_id - integer (References Customer table) 
note_id - integer (References Note table) 

Table: ServiceNote 
id - integer 
service_id - integer (References Service table) 
note_id - integer (References Note table) 

두 번째 방법은 저장 노트 테이블을 수정하는 것입니다 다음

데이터베이스 스키마입니다 엔티티 이름과 레코드의 ID. 이 방법은 방법 # 1

Approach #2 
Table: Note 
id - integer 
note - text 
author - integer 
type - varchar 
cdate - datetime 
entity - varchar (possible values are Customer and Service) 
entity_id - integer (related to id in the corresponding entity) 

두 번째 방법은 여분의 테이블이 필요하지 않습니다에 언급 된 관계를 사용하지 않지만, 외래 키 관계를 시행하기 쉽지 않다. 이전에 말했듯이 삽입/업데이트보다 더 많은 쿼리가 있습니다. 그렇다면 어느 것이 더 이상적이고 효율적인 접근 방법이 될까요?

엄격한 외래 키 관계를 구현하면 성능 문제가 있는지 알고 싶습니다.

답변

0

두 번째 접근법은 어쨌든 인덱스를 입력 필드에 추가하는 것이 좋습니다. 유형을 정수로 변환하여이 값을 나타내는 것이 더 나을 것입니다. Seevice에는 1, Customent에는 2가 있습니다. 정수를 사용하면 더 빠를 것입니다. 그러나 어쨌든이 접근법은 귀하의 enforce foreign key을 만족시키지 못할 것입니다.

관련 문제