다음 상황에서 두 가지 db 스키마 접근 방식 중 어느 것을 채택해야하는지 혼란 스럽습니다.검색 및 정렬에 가장 효율적인 두 가지 MySQL DB 스키마 접근법은 무엇입니까?
웹 사이트에 여러 속성을 저장해야합니다. 예 : 페이지 크기, 단어 수, 카테고리 등이 있으며 향후 속성 수가 증가 할 수 있습니다. 목적은이 테이블을 사용자에게 표시하는 것이며 데이터 사이에서 신속하게 필터링/정렬 할 수 있어야합니다 (따라서 테이블 구조는 빠른 쿼리 & 정렬을 지원해야합니다). 또한 변경 일정을 유지하기 위해 이전 데이터의 로그를 유지하려고합니다. 그래서 내가 생각 한 두 테이블 구조 옵션은 다음과 같습니다
옵션 A
website_attributes는
ID, website_id, PAGE_SIZE, WORD_COUNT, CATEGORY_ID, title_id를, ... .. (최대 18 개의 열로 이동하면서 몇 개의 null 값이있을 수 있으며 앞으로도 더 많은 열을 추가해야 할 수도 있음을 명심해야합니다.)
웹 사이트 일부 속성이 다른 테이블에 연결도 정렬 할 때 "change_update_time"
내가이 스키마의 장점을 느낄에 대한 추가 열이 위와 같이
동일한 테이블 strucuture을 _attributes_change_log하면 쿼리도 쉽게 작성할 수있을 것입니다 간단합니다. 단점은 ALTER TABLE이 큰 데이터 테이블에서 실행되는 데 오래 걸리면 많은 컬럼이있는 많은 행이있을 수 있으므로 나중에 컬럼을 추가하는 것이 문제가 될 수 있다고 생각합니다.
옵션 B
website_attribute_fields
은 attribute_id, ATTRIBUTE_NAME (예컨대 PAGE_SIZE) attribute_value_type (예컨대 INT)
website_attributes
ID, website_id, ATT ribute_id, attribute_value, last_update_time
이점은 언제나 열을 추가 할 수 있고 저장 공간을 절약 할 수 있다는 점에서이 접근법의 유연성 인 것으로 보입니다. 그러나이 접근법을 채택하는만큼 테이블을 표시해야 할 때 쿼리 작성이 특히 복잡 할 것입니다. [여러 사이트에 대한 레코드를 한 번에 표시해야하며 상호 참조도 필요합니다. 특정 속성에 대해 다른 테이블과의 값] + 데이터 정렬은 어렵습니다 [이것이 컬럼 기반 접근법이 아닐 때].
나는 것보고 할 것입니다 무엇의 샘플 출력 :
Site-A.com, 232,032 바이트, 232 개 단어, 홍보 사, 부동산은 [카테고리 테이블에 연결] ..
을Site-B.com, ..., ..., ..., ...
사용자는 모든 숫자 기반 열을 기준으로 정렬 할 수 있어야하므로 접근 방법 B가 어려울 수 있습니다.
그래서 옵션 A를 사용하여 옳은 일을하고 있는지 또는 처음부터 고려하지 않은 다른 더 나은 옵션이 있는지 알고 싶습니다.
downvote를 준 사람에게 : 책임을 져야하고 왜 그 대답이 페널티를받을 자격이 있다고 생각하는지 설명하십시오. 아마 나는 그것을 향상시킬 수있다. –