我正在建立一个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 )
您需要将外键添加到listings表中。对于一对多关系,记录外键的是“许多”方面。
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), )