MySQL 데이터베이스에서 '즐겨 찾기'관계를 구현하는 방법은 무엇입니까?

케빈 쿠퍼

공연자와 장소 목록을 표시하는 앱이 있습니다. 앱 사용자는 원하는만큼 각 유형을 '즐겨 찾기'로 선택할 수 있습니다. MySQL 데이터베이스에서 이것을 구현하는 표준 방법이 있는지 궁금합니다. 내 옵션은 다음과 같습니다.

  1. 하나의 테이블 Favorite을 가지고 저장UserID, Type, TypeID
    • Type 'Performer'또는 'Venue'가됩니다.
  2. 하나의 테이블 Favorite을 가지고 저장UserID, PerformerID, VenueID
    • PerformerID또는 중 하나만 VenueID각 항목에 대한 값을 가질 수 있습니다.
  3. 두 개의 테이블 Favorite_PerformerFavorite_Venue, 각각 저장 UserID, PerformerID또는UserID, VenueID
    • 이것이 '관계 적으로'하는 가장 좋은 방법이라고 생각합니다.

각 방법의 장단점은 무엇이며 향후 유지 관리 측면에서 어떤 것을 권장합니까? 감사.

스펜서 7593

옵션 3이 가장 깨끗합니다. 즐겨 찾기를 추가하고 제거하는 것이 가장 쉽습니다. 그리고 이것이 ORM 프레임 워크가 구현할 스키마입니다.

옵션 1은 실행 가능하지만 무결성을 적용하기 위해 외래 키 제약 조건을 정의 할 수 없습니다. WHERE type='Venue'쿼리에 조건 자를 추가하면 별도의 'Favorite_Venue'테이블로 작업하는 것과 거의 비슷하게 해당 테이블로 작업 할 수 있습니다.

옵션 2는 즐겨 찾기가 이미있는 경우 추가하는 것을 복잡하게합니다. (이렇게하려면 삽입하는 대신 기존 행을 업데이트해야합니다. 누군가가 즐겨 찾는 장소 2 개와 좋아하는 공연자 5 명을 가졌다면 몇 개의 행이 될까요? 그러나 최소한 외래 키를 정의 할 수 있습니다.

좋아하는 공연장 2 개와 좋아하는 공연자 2 개가 있다고 가정 해 보겠습니다.

userID  venueID  performerID
------  ------- -----------
     1       11          177
     1     NULL          654
     1       12         NULL

즐겨 찾는 장소 ID 11이 제거되면 행을 업데이트하여 장소 ID를 NULL로 설정합니다. 그러나 placeID 12가 즐겨 찾기에서 제거되면 열을 NULL로 설정하거나 행을 삭제합니다. 좋아하는 연기자를 추가하려고 할 때 performerID가 NULL 인 기존 행을 업데이트하거나 행을 삽입합니다. 작동하지 않는 것은 아니지만 더 복잡합니다.

VenueID 또는 performerID 열 중 하나만 채울 수 있다는 규칙이있는 경우 다음과 같은 조건자를 사용 WHERE venueID IS NOT NULL하면 별도의 Favorite_Venue 테이블로 작업하는 것과 거의 비슷하게이 테이블로 작업 할 수 있습니다.

요컨대, 그렇지 않은 설득력있는 이유가없는 한 옵션 3을 선택하겠습니다.


"혼잡함"이 아닙니다. 각 테이블 Favorite_Venue 및 Favorite_Performer에는 목적, "raison d' etre", 그 이유가 있습니다. 각 테이블은 다 대다 관계를 해결합니다.

이 두 개의 개별 "관계"테이블을 단일 테이블로 결합하면 실제로 혼란스러워집니다. 행을 구분하기 위해 열을 추가하면 (이 행이 실제로 속하는 테이블에 대한 질문에 효과적으로 답하기 위해) 해당 열은 "정리"입니다. 두 관계에 대해 동일한 행에 두 개의 개별 열을 사용하면 즐겨 찾기 추가 또는 제거를 처리하는 코드가 복잡해집니다.

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

즐겨 찾기에 Eclipse를 추가하는 방법은 무엇입니까?

분류에서Dev

즐겨 찾기에 Eclipse를 추가하는 방법은 무엇입니까?

분류에서Dev

페이지를 먼저로드하지 않고 즐겨 찾기를 즐겨 찾기에 추가하는 방법은 무엇입니까? (Internet Explorer, Firefox)

분류에서Dev

"즐겨 찾기에 추가"를 만들고 Swift 4에서 즐겨 찾기 목록에 표시하는 방법은 무엇입니까?

분류에서Dev

Gnome Shell의 즐겨 찾기 모음에 폴더를 추가하는 방법은 무엇입니까?

분류에서Dev

Gnome Shell의 즐겨 찾기 모음에 폴더를 추가하는 방법은 무엇입니까?

분류에서Dev

Windows 10 Insider Preview의 즐겨 찾기에 내 폴더를 추가하는 방법은 무엇입니까?

분류에서Dev

Terminal.app에서 즐겨 찾는 탭 / 디렉토리를 실행하는 방법은 무엇입니까?

분류에서Dev

Plasma 5.x의 KDE 메뉴에서 영구 즐겨 찾기를 제거하는 방법은 무엇입니까?

분류에서Dev

Microsoft Edge에서 즐겨 찾기를 구성하는 방법

분류에서Dev

vue.js 2에서 즐겨 찾기-즐겨 찾기 버튼을 추가하는 방법은 무엇입니까?

분류에서Dev

즐겨 찾기 페이지에 표시 할 항목을 추가하는 방법은 무엇입니까?

분류에서Dev

Gnome 3 즐겨 찾기에 휴지통 아이콘을 추가하는 방법은 무엇입니까?

분류에서Dev

Android에서 즐겨 찾기 목록을 만드는 가장 좋은 방법은 무엇입니까?

분류에서Dev

mysql 데이터베이스에서 특정 달과 일치하는 모든 데이터를 찾는 방법은 무엇입니까?

분류에서Dev

사용자 즐겨 찾기 테이블을 만드는 올바른 방법은 무엇입니까 (성능)

분류에서Dev

특정 기간이 지나면 MySQL 데이터베이스에서 데이터를 자동으로 제거하는 방법은 무엇입니까?

분류에서Dev

모든 관계형 데이터베이스를 설명하기 위해 Spring Jdbc를 구현하는 방법은 무엇입니까?

분류에서Dev

런처를 과도하게 채우지 않고 즐겨 찾는 애플리케이션에 쉽게 액세스 할 수있는 방법은 무엇입니까?

분류에서Dev

관계형 데이터베이스에서이 관계를 모델링하는 방법은 무엇입니까?

분류에서Dev

여러 열이 고유 할 때 관계형 데이터베이스에서 기본 키를 선택하는 방법은 무엇입니까?

분류에서Dev

Windows에서 Ubuntu로 MySQL 데이터베이스를 전송하는 방법은 무엇입니까?

분류에서Dev

MySql에서 GeoLite2 IP CSV 데이터베이스를 사용하는 방법은 무엇입니까?

분류에서Dev

Bluemix에서 MySQL 데이터베이스를 백업하는 방법은 무엇입니까?

분류에서Dev

MySQL / phpMyAdmin에서 데이터베이스를 복원하는 방법은 무엇입니까?

분류에서Dev

빈 테이블로 mysql에서 데이터베이스를 내보내는 방법은 무엇입니까?

분류에서Dev

일대 다 관계로 데이터베이스에 기록하는 방법은 무엇입니까?

분류에서Dev

선택한 옵션을 기반으로 데이터베이스 MySQL의 텍스트 상자에 데이터를 표시하는 방법은 무엇입니까?

분류에서Dev

이 다소 복잡한 개념 / 관계를 데이터베이스에서 구현하는 방법은 무엇입니까?

Related 관련 기사

  1. 1

    즐겨 찾기에 Eclipse를 추가하는 방법은 무엇입니까?

  2. 2

    즐겨 찾기에 Eclipse를 추가하는 방법은 무엇입니까?

  3. 3

    페이지를 먼저로드하지 않고 즐겨 찾기를 즐겨 찾기에 추가하는 방법은 무엇입니까? (Internet Explorer, Firefox)

  4. 4

    "즐겨 찾기에 추가"를 만들고 Swift 4에서 즐겨 찾기 목록에 표시하는 방법은 무엇입니까?

  5. 5

    Gnome Shell의 즐겨 찾기 모음에 폴더를 추가하는 방법은 무엇입니까?

  6. 6

    Gnome Shell의 즐겨 찾기 모음에 폴더를 추가하는 방법은 무엇입니까?

  7. 7

    Windows 10 Insider Preview의 즐겨 찾기에 내 폴더를 추가하는 방법은 무엇입니까?

  8. 8

    Terminal.app에서 즐겨 찾는 탭 / 디렉토리를 실행하는 방법은 무엇입니까?

  9. 9

    Plasma 5.x의 KDE 메뉴에서 영구 즐겨 찾기를 제거하는 방법은 무엇입니까?

  10. 10

    Microsoft Edge에서 즐겨 찾기를 구성하는 방법

  11. 11

    vue.js 2에서 즐겨 찾기-즐겨 찾기 버튼을 추가하는 방법은 무엇입니까?

  12. 12

    즐겨 찾기 페이지에 표시 할 항목을 추가하는 방법은 무엇입니까?

  13. 13

    Gnome 3 즐겨 찾기에 휴지통 아이콘을 추가하는 방법은 무엇입니까?

  14. 14

    Android에서 즐겨 찾기 목록을 만드는 가장 좋은 방법은 무엇입니까?

  15. 15

    mysql 데이터베이스에서 특정 달과 일치하는 모든 데이터를 찾는 방법은 무엇입니까?

  16. 16

    사용자 즐겨 찾기 테이블을 만드는 올바른 방법은 무엇입니까 (성능)

  17. 17

    특정 기간이 지나면 MySQL 데이터베이스에서 데이터를 자동으로 제거하는 방법은 무엇입니까?

  18. 18

    모든 관계형 데이터베이스를 설명하기 위해 Spring Jdbc를 구현하는 방법은 무엇입니까?

  19. 19

    런처를 과도하게 채우지 않고 즐겨 찾는 애플리케이션에 쉽게 액세스 할 수있는 방법은 무엇입니까?

  20. 20

    관계형 데이터베이스에서이 관계를 모델링하는 방법은 무엇입니까?

  21. 21

    여러 열이 고유 할 때 관계형 데이터베이스에서 기본 키를 선택하는 방법은 무엇입니까?

  22. 22

    Windows에서 Ubuntu로 MySQL 데이터베이스를 전송하는 방법은 무엇입니까?

  23. 23

    MySql에서 GeoLite2 IP CSV 데이터베이스를 사용하는 방법은 무엇입니까?

  24. 24

    Bluemix에서 MySQL 데이터베이스를 백업하는 방법은 무엇입니까?

  25. 25

    MySQL / phpMyAdmin에서 데이터베이스를 복원하는 방법은 무엇입니까?

  26. 26

    빈 테이블로 mysql에서 데이터베이스를 내보내는 방법은 무엇입니까?

  27. 27

    일대 다 관계로 데이터베이스에 기록하는 방법은 무엇입니까?

  28. 28

    선택한 옵션을 기반으로 데이터베이스 MySQL의 텍스트 상자에 데이터를 표시하는 방법은 무엇입니까?

  29. 29

    이 다소 복잡한 개념 / 관계를 데이터베이스에서 구현하는 방법은 무엇입니까?

뜨겁다태그

보관