我是Android编程的新手,我制作了一些使用SQLite存储用户数据的简单应用程序。现在我正在研究一个更复杂的应用程序,我需要在表中实现多对多关系。
所以基本上,我有三层(3个表)相互连接,我找不到一个好的教程或任何关于如何做的文档。我花了几周时间研究这个问题。我也查看了realm-database,但它对于多对多表设置来说很复杂。
对于初学者来说,有没有更简单的解决方案?或者是否有其他工具可以用来完成我的任务。任何的意见都将会有帮助。谢谢:))
答案 0 :(得分:3)
你的榜样不是多对多的关系。这是一对多,每个国家只能存在于一个大陆,每个国家只能在一个国家。
您可以通过添加对父类型ID的引用来获得所需的结构。
CREATE TABLE continent (
_id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,
name TEXT NOT NULL
)
CREATE TABLE country (
_id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,
continentId INTEGER NOT NULL,
name TEXT NOT NULL,
FOREIGN KEY continentId REFERENCES continent(_id)
)
CREATE TABLE state (
_id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,
countryId INTEGER NOT NULL,
name TEXT NOT NULL,
FOREIGN KEY countryId REFERENCES country(_id)
)
要选择非洲大陆上的所有国家/地区,只需使用正确的ID询问SQL。
SELECT *
FROM country
WHERE continentId = ?
或者你可以加入他们。
SELECT *
FROM continent
JOIN country ON continent._id = country.continent
JOIN state ON country._id = state.countryId
答案 1 :(得分:2)
您可以与SQLite建立多对多的关系。对于显示的示例,您只需要一些XREF表。例如(伪代码):
Table CONTINENT(
ContinentID
,ContinentName
)
Table COUNTRY(
CountryID
,CountryName
)
Table CONTINENT_COUNTRY_XREF (
Continent_Country_XrefID
,ContinentID
,CountryID
)
希望这有帮助。
答案 2 :(得分:0)
是的,您可以使用SAP的Ultralite数据库。它也支持连接。
答案 3 :(得分:0)
要以多对多关系连接两个表,请创建一个包含三列的第三个表。第一列只是主键的标准。其他两列是两个原始表中的二级键。谷歌搜索"多对多的关系"将提供更多细节。