Объединение таблиц базы данных Проблема уникальных полей - PullRequest
0 голосов
/ 13 декабря 2011

У меня есть программа (которую я не могу изменить, это музыкальное приложение, написанное другим разработчиком), которая использует пару баз данных 97 'доступа. Одной из этих баз данных является база данных «Списки воспроизведения» с 2 таблицами «PlaylistNames» и «PlaylistSongs».

Таблица «PlaylistNames» имеет столбец AutoIncrement, Unique, PrimaryKey «autoID» типа long, столбец строки «PlaylistName», в котором содержится имя каждого списка воспроизведения, и столбец «isServerPlaylist» bool, который определяет, создан ли список воспроизведения с помощью пользователь или был отправлен с сервера.

Таблица «PlaylistSongs» имеет столбец AutoIncrement, Unique, PrimaryKey «autoID», столбец «PlaylistID», который представляет собой ForeignKey, указывающий на поле «autoID» предыдущей таблицы, и столбец «TrackID» ForeignKey для другой таблицы, которая содержит Информация о песнях.

Вот так выглядят записи в 2 таблицах:

"PlaylistNames"

autoID: 01 PlaylistName: Rock isServerPlaylist: True

autoID: 02 PlaylistName: Pop isServerPlaylist: True

"PlaylistSongs"

autoID: 01 PlaylistID: 01 TrackID: 100

autoID: 02 PlaylistID: 01 TrackID: 101

autoID: 03 PlaylistID: 01 TrackID: 102

autoID: 04 PlaylistID: 02 TrackID: 103

autoID: 05 PlaylistID: 02 TrackID: 104

autoID: 06 PlaylistID: 02 TrackID: 105

, что означает, что есть 2 текущих списка воспроизведения, Rock и Pop, и каждый состоит из 3 треков.

Теперь существует база данных на стороне клиента и сервера. В базе данных клиента есть копия списка воспроизведения на сервере плюс любой список воспроизведения, который клиент может добавить / создать. Плейлисты на стороне сервера также обновляются.

Допустим, серверные плейлисты - это 2 Rock и Pop. Если пользователь добавляет / создает новый список воспроизведения, новая запись в таблице PlaylistNames будет добавлена ​​в клиентскую базу данных с autoID = 03, playlistName, который выберет клиент, и поле isServerPlaylist = false. В таблицу PlaylistSongs будет добавлено столько записей, сколько песен, которые клиент выберет для добавления в список воспроизведения. Столбец playlistID будет 03.

Сервер также обновляет свои списки воспроизведения, поэтому при обновлении на сервере я мог бы добавить / создать новый список воспроизведения, который будет иметь в таблице PlaylistNames autoID = 03, имя списка воспроизведения, которое я выберу, и для столбца isServerSide установлено значение true.

Я хочу объединить эти списки воспроизведения таким образом, чтобы при добавлении новых списков воспроизведения на стороне сервера и когда клиент создавал свои собственные списки воспроизведения, столбец первичного ключа AutoID объединенной таблицы PlaylistNames будет иметь уникальные значения. Вот где я застрял. Не могли бы вы, ребята, указать способ, которым это можно сделать?

Ответы [ 2 ]

1 голос
/ 13 декабря 2011

Я предполагаю, что обработка на стороне сервера вне вашей досягаемости? (т.е. объединение двух списков воспроизведения?)

В этом случае я хотел бы предложить, чтобы, когда ваш пользователь создавал плейлист в автономном режиме, он автоматически проверял, существует ли уже подобный плейлист на сервере. После этого вы можете скачать существующий список воспроизведения сервера, а затем добавить его. Или же вы можете просто проверить, какой наибольший идентификатор указан в этом списке воспроизведения сервера, и убедиться, что ваш автономный список воспроизведения начинается с (MaximumIDserverside +1).

0 голосов
/ 13 декабря 2011

Это проще.Добавьте к первичному ключу поле isServerPlaylist и играйте.

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