문제

다른 응용 프로그램을위한 확장 가능한 프레임 워크로 사용될 응용 프로그램을 작업 중입니다.

기본 클래스 중 하나를 노드라고하며 노드에는 내용이 있습니다. SQL 테이블은 다음과 같습니다.

테이블 노드 (nodeid int, .... 등)

테이블 nodecontentrelationship (nodeid int, contenttype string, contentid int)

자체 컨텐츠 유형을 만들기 위해 응용 프로그램을 확장하는 개발자에게 달려 있습니다.

분명히 이것은 관계-대사 관점에서 나쁘다. ~이다 외국 키 열.

그러나 솔루션은 매우 간단하고 강력하므로 변경하기를 꺼려합니다.

당신은 어떻게 생각하십니까 - 내가 트랙 아래로 고통의 세계에 들어가고 있습니까?

도움이 되었습니까?

해결책

설정하는 것이 불가능한 이유는 무엇입니까? NoteContentRelationship.ContentId 외국 키로? 테이블과 함께 관계 상속 모델을 쉽게 사용할 수 있습니다. Content 추상 기본 클래스와 다양한 테이블을 나타냅니다 AnimalContent, CarContent, 파생 수업을 나타내는 등.

다른 팁

조심하십시오 내부 플랫폼 효과.

개발자가 다른 '콘텐츠 유형'의 데이터를 저장하고 일반적인 방식으로 서로 관련시킬 수있는 '확장 가능한 프레임 워크'를 구축하려고하는 경우 다른 사람들이 이미 이미 가지고 있음을 알 수 있습니다. 해결되었습니다 이것 문제.

이것은 나에게 EAV (엔티티, 속성, 가치) 디자인의 변형처럼 보입니다.

EAV 디자인의 이점과 단점은 광범위하게 문서화되었습니다.

다음은 동정적인 관점에서 EAV에 대한 설명입니다.

http://ycmi.med.yale.edu/nadkarni/introduction%20to%20eav%20Systems.htm

그리고 여기에 적대적인 관점에서 나온 것입니다.

http://tonyandrews.blogspot.com/2004/10/otlt-and-eav-two-big-design-mistakes.html

EAV의 단점을 알고 있어야합니다. 프로그래머에게는 엄청나게 유혹적이지만 데이터 관리자의 악몽이 될 수 있습니다.

실제로이 데이터에 대해보고하고 싶다면 도로에서 상처를 입은 세계를 위해 있습니다. 당신은 단지 결합 등을 작성하기가 훨씬 더 어려워졌습니다. 제약 부족은 나쁘지만 쿼리에 필요한 추가 작업은 (IMHO) 더 나쁩니다.

그러나 다른 개발자가 시스템을 확장하고 데이터베이스에 데이터를 저장할 수 있지만 데이터베이스 스키마를 변경할 수 없으려면 선택 사항이 없을 수도 있습니다. 이 경우 해답은이 방법으로 얼마나 많은 저장되는지를 최소화하는 것입니다. ContentType을 다른 테이블에 정의 된 ContentTypeid로 교체하여 약간 속도를 높일 수도 있습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top