一尘不染

带外键列表的SQLite字段

sql

我正在建立一个SQLite数据库,以保留房地产经纪人的清单。我已经能够使用外键来标识每个代理商的清单,但是我想在每个代理商的记录中列出清单。从座席和列表之间的一对一关系转变为一对多关系。

在这里查看:http :
//www.sqlite.org/draft/foreignkeys.html,没有提到一个字段是“外键列表”。我想做的事可行吗?

我认为,作为一种解决方法,我可以制作一个包含关系本身的表,但这似乎不是一个很干净的解决方案。我看了一下这个线程:SQLite外键示例,但是我不确定我的元素是否类似于它们描述的多对多关系。

我也愿意就如何更好地做到这一点提出建议。我应该只在实际的列表中包括一个列表代理的名字,然后从那里查询吗?

CREATE TABLE listings
(
    listing_id        INTEGER PRIMARY KEY AUTOINCREMENT,
    listing_address   TEXT UNIQUE NOT NULL,
    acq_date          DATE
 )

CREATE TABLE agent
(
     agent_id         INTEGER PRIMARY KEY AUTOINCREMENT,
     agent_name       TEXT NOT NULL,
     agent_listings   INTEGER,
     FOREIGN KEY (agent_listings) REFERENCES listings (listing_id) NOT NULL
 )

阅读 145

收藏
2021-05-16

共1个答案

一尘不染

您需要将外键添加到listings表中。对于一对多关系,记录外键的是“许多”方面。

CREATE TABLE listings
(
    listing_id        INTEGER PRIMARY KEY AUTOINCREMENT,
    listing_address   TEXT UNIQUE NOT NULL,
    acq_date          DATE
    agent_id          INTEGER,
    FOREIGN KEY (agent_id) REFERENCES agent (agent_id)
)

CREATE TABLE agent
(
     agent_id         INTEGER PRIMARY KEY AUTOINCREMENT,
     agent_name       TEXT NOT NULL,
)

如果您希望清单由 多个 代理处理(以多对多关系),则必须添加一个链接表:

CREATE TABLE listings
(
    listing_id        INTEGER PRIMARY KEY AUTOINCREMENT,
    listing_address   TEXT UNIQUE NOT NULL,
    acq_date          DATE
)

CREATE TABLE agent
(
    agent_id          INTEGER PRIMARY KEY AUTOINCREMENT,
    agent_name        TEXT NOT NULL,
)

CREATE TABLE agent_listings
(
    agent_id         INTEGER NOT NULL,
    listing_id       INTEGER NOT NULL,
    UNIQUE (agent_id, listing_id),
    FOREIGN KEY (agent_id) REFERENCES agent (agent_id),
    FOREIGN KEY (listing_id) REFERENCES listings (listing_id),
)
2021-05-16