在SQLite关系数据库中对此进行建模
发布时间:2020-12-12 19:09:00 所属栏目:百科 来源:网络整理
导读:假设我有一个Citizen表(列:rowid,name)和一个Race表(列:rowid,name).这些是世界公民,比赛是“高加索人”,“非裔美国人”等.sigid是SQLite提供的默认列. 有数十亿的公民.比如50,比赛很少. 什么是将每个公民与其种族联系起来的SQLite方式? 在标准编程语言中
假设我有一个Citizen表(列:rowid,name)和一个Race表(列:rowid,name).这些是世界公民,比赛是“高加索人”,“非裔美国人”等.sigid是SQLite提供的默认列.
有数十亿的公民.比如50,比赛很少. 什么是将每个公民与其种族联系起来的SQLite方式? 在标准编程语言中,我只需在每个种族上附上一个包含所有相应公民rowid的集合.这将允许我做各种事情: >鉴于比赛,快速找到所有成员. 我怎么能在SQLite中做到这一点?鉴于SQLite只有B树索引,这可能会很棘手吗?也许这种数据不属于SQLite数据库开头? SQLite has support for FOREIGN KEYS,所以您应该按如下方式对表进行建模.Race表中的RaceId是Citizen表中的FOREIGN KEY,如果1 Citizen在您的应用程序用例中只能有1个主要竞赛. CREATE TABLE Race ( RowId INTEGER AUTO_INCREMENT PRIMARY KEY,RaceName TEXT ); CREATE TABLE Citizen ( RowId BIGINT AUTO_INCREMENT PRIMARY KEY,CitizenName TEXT,RaceId INTEGER,FOREIGN KEY(RaceId) REFERENCES Race(RowId) ); 如果你想支持多种族(这些天很有可能),那么从Citizen表中删除FOREIGN KEY并创建一个名为CitizenRace的新MANY-2-MANY表,它将具有CitizenIds和RaceIds,如下所示. CREATE TABLE Race ( RowId INTEGER AUTO_INCREMENT PRIMARY KEY,CitizenName TEXT ); CREATE TABLE CitizenRace ( CitizenId BIGINT,FOREIGN KEY(CitizenId) REFERENCES Citizen(RowId),FOREIGN KEY(RaceId) REFERENCES Race(RowId) ); (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |