Предположим, у меня есть база данных, содержащая исполнителей и их альбомы.
CREATE TABLE Artist (
ArtistID INTEGER PRIMARY KEY,
ArtistName TEXT NOT NULL
);
CREATE TABLE Album(
AlbumName TEXT PRIMARY KEY,
ArtistID INTEGER REFERENCES Artist(ArtistID),
Year INTEGER
);
Итак, я создаю приложение в Visual Studio и подключаю базу данных SQLite к своему проекту с помощью компактного набора инструментов сервера sqlite / sql server.Затем я хочу управлять базой данных с помощью C #
. Я создаю приложение для своих пользователей.Пользователь хочет найти все альбомы по имени исполнителя.
Если мой первичный ключ является свойством автоинкремента, должен ли я использовать такой синтаксис, как:
public static IQueryable<Artist> GetPossibleArtists(string name)
{
var matches = from match in dB.Artists where match.ArtistName == name select match;
return matches;
}
public static Artist GetFirstArtistIfExists(string artistName)
{
var artistMatches = GetPossibleArtists(artistName);
if (artistMatches.Count() == 0)
return null;
return artistMatches.First();
}
, чтобы яСначала зайдите в базу данных, чтобы найти исполнителя по его идентификатору, потому что я не могу просто найти альбомы по имени исполнителя, потому что имя исполнителя не является первичным ключом, и я не могу искать в таблице «Альбомы» по имени исполнителя, ямогу искать в этой таблице только по идентификатору исполнителя. И тогда я смогу наконец найти все альбомы по идентификатору исполнителя.
public static IQueryable<Album> GetPossibleAlbums(long artistID)
{
var matches = from match in dB.Albums where
match.ArtistID == artistID
select match;
return matches;
}
Вопросы: 1) Что я делаю не так, и есть ли лучший способполучить доступ ко всем альбомам исполнителя, чтобы мне не нужно было обращаться к базе данных, чтобы "найти идентификатор исполнителя по его имени", прежде чем мне удастся найти все альбомы по ArtistID?2) Возможно, я неправильно спроектировал свою базу данных, есть предложения?3) Является ли хорошей идеей сохранить имя исполнителя в таблице «Альбом» и как мне это сделать, чтобы сохранить первичный ключ автоинкремента моего исполнителя в то же время?