SQL Server: отношение «многие ко многим» - PullRequest
0 голосов
/ 30 ноября 2010

Таким образом, у меня происходит перепад мозгов при попытке выяснить это. У меня есть несколько баз данных:

tblGenre

genreID
genreName

tblArtist

artistID
artistName
genreID

tblAlbum

albumID
albumName
artistID

Все хорошо, работает нормально. Хорошо, теперь с вопросом ...

Что я пытаюсь выяснить, так это как связать художника с несколькими именами. То есть художник "принц". У меня есть альбомы от него, которые я бы каталогизировал под 3 разными группами; Принц (artistID = 5), Принц и новое поколение власти (artistID = 17 и «Символ» (artistID = 43) ...

Итак, когда я ищу исполнителя "Prince", у которого artistID равен 5, как я могу связать две другие группы с этой? Буду ли я создавать отдельную базу данных, в которой значения каждого артиста разделены запятыми (т. Е. 5, 17, 43) или есть более простой способ сделать это?

Я не хочу заходить так далеко, как уровень альбома, который играл на каждом альбоме в моей базе данных. Я просто хочу создать ссылку артистов, которые были с несколькими группами. Еще несколько примеров того, как я хотел бы "зацепиться" ...

  • Том Петти (Классический рок)

    • Том Петти и разбиватели сердец (классический рок)
    • Том Петти и разбиватели сердец (саундтрек)
  • Принц (фанк)

    • Принц и новое поколение энергии (фанк)
  • Марк Нопфлер (Классический рок)

    • Марк Нопфлер (саундтрек)
    • Dire Straits (Classic Rock)

Спасибо за ввод.

Ответы [ 3 ]

3 голосов
/ 30 ноября 2010

У вас есть два варианта:

1) Таблица ARTISTS и таблица ARTISTS_ALIASES, где artistid - это внешний ключ в таблице ARTISTS_ALIASES, и в вашей таблице ALBUM будет иметься Artist_aliasid, так что вы будете знать вкакое имя исполнителя появилось на этом альбоме;или

2) одного артиста, использующего рекурсию (например, таблицу EMPLOYEE BOSS):

                artistid
                artistname
                primaryartistid  (references artistid in this table

Когда artistid и primaryartistid одинаковы, вы рассматриваете эту строку как «базового» исполнителя.

0 голосов
/ 30 ноября 2010

Дрю, звучит так, как будто tblArtist - больше группа, чем основной исполнитель для альбома.Я вижу, у вас есть vb, указанный в вопросе, поэтому я также предполагаю, что у вас есть vb front end в этом приложении.Учитывая все эти предположения, я предлагаю вам добавить столбец varchar в tblArtist с именем altArtistId.Добавьте этот столбец в набор записей повторной настройки в своем интерфейсе.Изучите разделенный запятыми список и вернитесь в tblArtist, чтобы получить любую связанную информацию.

0 голосов
/ 30 ноября 2010

Я бы создал таблицу типа tblRelatedArtists , которая имеет два столбца: .artistID и .relatedArtistID.

Когда вы запрашиваете базу данных, вы можете внутренне присоединиться к tblArtist where .artistID is in (select relatedArtistID from tblRelatedArtists as innerArtists where innerArtists.artistID = outerArtists.artistID).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...