EDIT : 건물 태그 시스템에 사람들에게. 이것을 읽지 마십시오. 그것은 당신이 찾고있는 것이 아닙니다. 나는 RDBMS가 모두 자신의 최적화 방법을 가지고 있다는 것을 알지 못했을 때이 질문을 던졌다. 단순한 many to many scheme을 사용했다.확장 가능한 데이터베이스 태깅 스키마
나는 수백만 개의 게시물이있는 게시 시스템을 가지고 있습니다. 각 게시물은 무한 수의 태그를 가질 수 있습니다.
사용자는 메모, 만든 날짜, 소유자 등이있는 태그를 만들 수 있습니다. 태그는 게시물 자체와 비슷합니다. 사람들이 태그에 대한 메모를 게시 할 수 있기 때문입니다.
각 태그 연관에는 소유자와 날짜가 있으므로 누가 태그를 추가했는지 확인할 수 있습니다.
내 질문은 어떻게 구현할 수 있습니까? 태그로 게시물을 빠르게 검색하거나 게시물별로 태그를 검색해야합니다. 또한 사용자는 Google 검색 창과 같이 필드에 이름을 입력하여 게시물에 태그를 추가 할 수 있으며 태그 이름의 나머지 부분을 채워야합니다.
현재로서는 3 가지 해결책이 있지만 어느 것이 가장 좋을지 또는 더 좋은 방법이 있는지 확실하지 않습니다.
태그에 대한 적절한 해결책을 얻은 후에는 평소와 다르기 때문에 메모 레이아웃을 표시하지 않습니다.
방법 1. 링크 된 목록 tag_assoc에서 연결된 목록에 포스트 포인트
tagId는 응용 프로그램이 FLINK = 0
post: id, content, ownerId, date, tagId, notesId
tag_assoc: id, tagId, ownerId, flink
tag: id, name, notesId
방법 2 비정규
태그까지 목록을 통과해야한다 tagId : ownerId의 탭으로 구분 된 배열을 포함하는 VARCHAR 또는 TEXT 필드입니다. 고정 크기 일 수는 없습니다.
post: id, content, ownerId, date, tags, notesId
tag: id, name, notesId
방법 3. Toxi
(에서 : http://www.pui.ch/phred/archives/2005/04/tags-database-schemas.html, 도 같은 일을 여기 : Recommended SQL database design for tags or tagging)
방법 3이 문제를 제기post: id, content, ownerId, date, notesId
tag_assoc: ownerId, tagId, postId
tag: id, name, notesId
, 어떻게 빨리 모든 반복하는 것 tag_assoc의 단일 행?
방법 1과 2는 태그로 게시물을 반환하는 데 빠르지 만 태그로 게시물을 작성하려면 다른 조회 테이블을 만들어야합니다.
내가 걱정해야 할 마지막 사항은 태그를 검색하여 이름을 최적화하는 것입니다. 아직 해결하지 못했습니다.
나는 여기에 ASCII도했다 ". 사람들이 태그에 대한 메모를 게시 할 수 있기 때문에 태그는 거의 게시물 자체 같다" http://pastebin.com/f1c4e0e53
태그는 게시물간에 공유됩니다. 나는 방법 3을 꽤 많이 결정했다. 태그를 가질 수있는 모든 테이블에는 _tags라는 다른 테이블이 있습니다. 예 : news_tags. 저는이 방법에 대해 여전히 일종의 스케치이지만, 모든 사람들이 그것을 추천하는 것처럼 보이므로 MySQL이이를 최적화한다고 가정하고 있습니다. –
"가정"- 나쁜 생각입니다. 알면 더 좋습니다. – duffymo