带有外键列表的SQLite字段

时间:2013-12-13 17:11:23

标签: sql sqlite foreign-keys one-to-many foreign-key-relationship

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

看这里:http://www.sqlite.org/draft/foreignkeys.html,没有提到一个“外键列表”的字段。我正在尝试做什么?

我认为,作为一种解决方法,我可能会创建一个包含关系本身的表,但这似乎不是一个非常干净的解决方案。我查看了这个帖子:SQLite foreign key examples,但我不确定我的元素是否与他们在那里描述的多对多关系相似。

我也欢迎提出如何更好地完成这项工作的建议。我应该只在实际列表中包含一个上市代理的名称,并从那里查询吗?

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
 )

1 个答案:

答案 0 :(得分:2)

您需要将外键添加到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),
)