2011-03-24 6 views
0

개발하는 동안 각 주요 추가와 함께 데이터베이스를 추가하고 있습니다. 가능한 테이블MySql 테이블을 사용하고 있습니까?

Image (id, name, path, state) 
Gallery (id, name, path, state) 
Image Gallery Relationship (image id, gallery id) 
Image User Relationship (image id, user id) 
Image Venue Relationship (image id, venue id) 
Image Event Relationship (image id, event id) 
Gallery User Relationship (image id, user id) 
Gallery Venue Relationship (image id, venue id) 
Gallery Event Relationship (image id, event id) 

나도 같은 사진을 생각하고을의 내 최신 이미지 갤러리 프로그램입니다, 나는 나 자신에게 모든 질문을 부탁 해요/

단순화 된 버전은 사용자가 촬영 소유/수 , 이벤트 및 장소에 할당, 사용자 사진에서 갤러리에서, 이벤트와 관련된 갤러리에서, 장소와 관련된 갤러리에서.

이제 사용자의 프로필 사진을 저장하기 위해 동일한 데이터베이스를 사용하려면 다른 테이블을 만들면됩니까? 프로필 사진 ID를 사용자 테이블에 넣어야합니까? 사진 소유권을 Image 테이블에 넣어야합니까? 그러나 대부분 사진의 주요 부분은 사용자가 업로드하지 않습니다. 이벤트 나 장소의 "프로필 사진"은 어떻습니까? 또는 갤러리의 표지 사진? 나는 많은 테이블을 만들거나 충분히 만들지 못했습니까? 열을 만들 때 그것이 null 또는 아마 다른 테이블에 있어야 여러 가지와 연관 될 수 있다면 필요한, 단일 값 속성은 다음 표에 배치하는 경우

(!) 참고 일반적으로 생각합니다. 하지만 저는 지금 60 테이블에 있습니다. 그리고 저는 제 프로그램의 절반도 안됩니다.

이 하루 정말 멘토 부족한, 그래서 모든 조언에 감사드립니다

그림은 내 질문이 미래에 도움이 더 일반화 될 수 있다면, 그것은 또한 내 현재 데이터베이스 my current database

의 관련 비슷한 질문을 가진 사람들

+0

제대로 정상화 된 것과 비교할 때 테이블이 너무 많으면 걱정할 필요가 없습니다. 표를 세는 대신 기능을 사용하십시오. – swisscheese

답변

2

무엇을 선택 하든지, 프레임에 넣고 갤러리에 걸어야합니다.

단순화하는 것이 좋습니다. 다르게 보자. 하나의 중앙 테이블을 고려하여 이미지를 연관 지을 수 있고 그런 다음 공통점을 찾을 수 있습니다. type 필드 (gallery, venue, event)를 추가하십시오. 어쩌면 추가 필드를 추가 할 수도 있지만 결국에는 작업과 데이터베이스를 크게 단순화합니다. 내가 만들고있는 무언가를 찾고있는 똑같은 영혼을 통해 갈 것입니다.

1

모든 개체 간의 정확한 관계가 모두 에 달려 있습니다. 귀하의 설명은 약간 퍼지기 때문에 여기에서 몇 가지 가정을 할 것입니다. 그러나 여기에 나와 있습니다.

주 규칙 : (Gallery_Image_Relationship (gallery_id, image_id)와 같은) 조인 테이블 만 사용하십시오. 당신은 다 대다 관계를 가지고 있습니다. 갤러리 이미지가 좋은 예라고 생각합니다. 갤러리에는 많은 이미지가 포함되어 있으며 이미지는 많은 갤러리에 속할 수 있습니다. 하지만 다른 것들은 단지 불필요한 합병증 일뿐입니다.

나머지 관계는 테이블 중 하나에 외래 키를 넣기 만하면됩니다. 일대 다면 표는 분명합니다. 사용자는 많은 이미지를 업로드 할 수 있지만 한 명의 사용자 만 이미지를 업로드 할 수 있습니까? 그런 다음 이미지 테이블에 uploader_id 열이 표시됩니다.말했다

는 여기에 당신의 DB에로 전환 할 내용은 다음과 같습니다.

users: 
    id, 
    name, 
    profile_image_id, #A user can only have one profile pic (at a time) 
    etc. 

images: 
    id, 
    name, 
    uploader_id, #It can only be uploded by one person 
    etc. 

galleries: 
    id, 
    name, 
    cover_image_id, 
    etc. 

images_galleries: # 'cause images:galleries is many:many 
    image_id, 
    gallery_id 

(나는 그래서이었다 생각하는 어떤 언어 아무 생각이 그것은 user, by, is 및 아포스트로피를 강조 ...)

이미지를 경기장 및/또는 이벤트에 연결할 때 주관적으로 느껴집니다. 이미지의 대부분/모든 것이 특정 이벤트를 기대합니까? 그렇다면 이미지 테이블에 event_id 열이 필요할 것입니다. 공연장도 마찬가지다.

그러나 많은 이미지가 특정 이벤트가되지 않을 것으로 예상되는 경우 해당 열은 단지 DB 공간을 낭비하는 것입니다. 따라서 갤러리은 일반적으로 하나의 이벤트/장소에 묶여 있습니까? 그렇다면 외래 키가 속한 곳입니다.

둘 중 어느 쪽도 적합하지 않으면 조인 테이블은 여전히 ​​옵션입니다. 나는 평범한 사형 집행 인들이 승인 할 것이라고는 생각하지 않지만 때로는 까다 롭지 않아도되는 경우가 있습니다.

희망 하시겠습니까?

관련 문제