我正在构建一个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
)
答案 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),
)