带有外键列表的 SQLite 字段

Pet*_*lty 2 sql sqlite foreign-keys foreign-key-relationship one-to-many

我正在构建一个 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
 )
Run Code Online (Sandbox Code Playgroud)

Mar*_*ers 5

您需要将外键添加到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,
)
Run Code Online (Sandbox Code Playgroud)

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

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),
)
Run Code Online (Sandbox Code Playgroud)