SQLite:设计数据库并使用AUTOINCREMENT ID访问其数据的正确方法是什么



假设我有一个包含艺术家及其专辑的数据库。

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/sql-server compact工具箱将SQLite数据库连接到我的项目,然后我想使用C#管理数据库

我为我的用户创建了一个应用程序。用户希望通过艺术家的姓名查找所有相册。

如果我的主键是一个autoincrement属性,我是否必须使用如下语法:

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();
}

因此,我首先访问数据库,根据艺术家的ID查找艺术家,因为我不能简单地根据艺术家的姓名查找专辑,因为艺术家的姓名不是主键,而且我不能根据艺术家的名称搜索"专辑"表,我只能根据艺术家的身份搜索此表然后我终于可以通过艺术家的id 找到所有的专辑

public static IQueryable<Album> GetPossibleAlbums(long artistID)
{
var matches = from match in dB.Albums where 
match.ArtistID == artistID
select match;
return matches;
}

问题是:1( 我做错了什么?有没有更好的方法可以访问艺术家的所有专辑,这样我就不需要先访问数据库"按姓名查找艺术家的ID",然后才能按艺术家ID查找所有专辑?2( 我可能把数据库设计错了,有什么建议吗?3( 将艺术家的名字存储在"专辑"表中是个好主意吗?我需要如何做到这一点,以保持艺术家的自动递增主键同时存在?

您需要一个JOIN将Albums表与ArtistID字段上的Artists表关联起来

var matches = from a in dB.Albums join b in db.Artists on a.ArtistID equals b.ArtistID
where b.ArtistName == artistName
select a;

联接条款C#引用

最新更新