나는 SO가 같은 테이블에 질문과 답변을 넣었다는 것을 배웠다. 그들은 질문에는 부모 ID가 없으며 대답에는 부모 ID가 포함되어 있다고합니다. 별도의 표에 질문과 답변을 넣는 대신이 방법을 사용하는 것이 더 나은 이유는 무엇입니까?질문과 대답을 동일한 데이터베이스 테이블에 넣는 것이 왜 유익합니까?
3
A
답변
2
몇 가지 이유 :
- 개념적 질문에 대한 답변을 모델링 관점에서 정말 다르지 않다;
- 검색하기가 더 쉽습니다 (두 개가 아닌 하나의 테이블).
- 두 테이블에 걸쳐 이러한 시스템을 구현하려고 시도한 적이 있다면 (스레드 및 응답을 시작하는 게시물이 포함 된 포럼을 포함하여)이 시스템을 구현하려고 시도해 본 적이 있다면 SQL이 실제로 매우 어색하다는 것을 빨리 알 수 있습니다.
이 문제를 보는 가장 좋은 방법은 사용 사례를 통해 특정 모델을 실행하는 것입니다.
예 : 사용자가 모든 게시물을 순서 (투표, 날짜 등)로 나열합니다. 두 테이블 사이에서 어떤 종류의 UNION이 발생하게되는데, 이는 실제로 바람직하지 않습니다. 같은 테이블에 저장하면 훨씬 쉽습니다. 단지 질문이나 답변으로 제한하고 싶다면, 같은 테이블은 추가 기준 (예 : 질문에 대한 parentID는 NULL)과 같이 쉽습니다.
1
Cletus가 맞습니다.하지만 답과 질문은 비슷하지만 실제로는 같지 않으므로 DB를 비정규 화하는 것이 좋습니다. 특히 하나의 질문에는 여러 가지 대답이 있지만 각각의 대답은 하나의 질문에만 포함됩니다. 중복 된 반복 데이터를 테이블에 저장하기 시작합니다. 인프라에 따라 속도/개발 이점이있을 수 있지만, DB 관리자에게이 사실을 알리면 심장 마비가 발생할 수 있습니다 .-) 그래서 네가 할 수 있고 개발하기가 약간 쉬워집니다. 그러나 동일한 데이터를 가져 오기 위해 조인과 공용체를 작성하는 것은 그리 어렵지 않습니다.
관련 문제
- 1. 작은 테이블에 인덱스를 넣는 것이 합리적입니까?
- 2. 대소 문자를 구분하는 파일 시스템을 사용하는 것이 개발에 유익합니까?
- 3. 많은 스레드가 동일한 데이터베이스 테이블에 동시에 액세스하는 경우 linqtosql이 처리합니까?
- 4. 왜 벡터화가 Matlab 프로그램에 유익합니까? NumPy와 Boost (uBLAS)는 동일합니까?
- 5. 질문과 대답 엔진 아키텍처
- 6. SMS에 데이터를 넣는 것이 의도를 보냈습니까?
- 7. 질문과 DFA
- 8. 질문과 좀 더
- 9. 데이터베이스 테이블에 대한 클래스/개체를 만드는 것이 좋습니까?
- 10. Excel 데이터베이스 테이블에 업로드
- 11. 동일한 테이블에 가입 하시겠습니까?
- 12. 동일한 테이블에 대한 참조
- 13. Drupal watchdog 데이터베이스 테이블에 동일한 메시지가 계속해서 넘쳐 흐르고 있습니까?
- 14. 장고에 미들웨어를 넣는 것이 얼마나 비쌉니까
- 15. 데이터베이스 테이블에 가중치를 저장합니다.
- 16. 데이터베이스 테이블에 +1을 삽입하십시오.
- 17. 동일한 mysql 테이블에 여러 개의 쿼리를 결합하십시오
- 18. HttpURLConnection : 대답을 읽는 방법
- 19. 동일한 apk에 위젯과 앱을 넣는 방법은 무엇입니까?
- 20. 데이터베이스 디자인의 테이블에 해당 개체
- 21. PHP 질문과 대답
- 22. sqlalchemy에서 동일한 테이블에 가입하는 방법
- 23. 여러 테이블에 동일한 레코드를 저장
- 24. 장고 쿼리 - 동일한 테이블에 가입
- 25. 클래스 매개 변수를 세션 객체에 넣는 것이 좋은 생각입니까?
- 26. 파이썬 지수에 대한 질문과 호기심의
- 27. 왜 JSON을 XML에 포함시키는 것이 좋지 않습니까?
- 28. linq이있는 동일한 서버의 데이터베이스 쿼리
- 29. MVC 모델에 데이터베이스 테이블 넣는 방법
- 30. 테이블에 그라디언트 스타일 표 셀을 넣는 방법은 무엇입니까?
음 ... 아니요. 질문 -> 답변은 자기 참조적인 일대 다 관계입니다. 이것은 고전적인 E-R 모델링이며 데이터베이스 사용자가 쉽게 이해할 수있는 것입니다. – cletus
@Nick : cletus가 맞습니다. 마지막 장소는 "pig tail"입니다. –
나는이 경우 가장 좋은 해결책이라고 말하는 것에 대해 이해하고 있습니다. 여기에 이유가 있습니다. 자신을 참조 할 필요가있는 동일한 종류의 것을 가지고 있다면 - 그렇습니다.이 접근법이 가장 좋습니다. 예를 들어, 마케팅 회사가 추천 수수료를 지불하기 위해 웹 사이트에 가입 할 사람을 누가 누가 추천했는지 보여줄 필요가있는 계정과 웹 사이트를 갖고 있다고 가정 해 봅시다. 그러면 돼지 꼬리를 사용할 수 있습니다. 그러나 데이터가 설정되는 방식에 따라 답변과 질문은 서로 다른 유형의 객체 일 가능성이 높습니다. 그러나 OS에서 답변과 질문이 동일하게 모델화 된 경우 올바른 접근 방식입니다. – konung