假设合同仅限于单个客户,那么您可以在合同表中有一个列来引用该客户。
我认为这是客户的照片,如果是这样,则无需从合同中引用此照片,因为引用客户的合同足以获取照片。
例如,如果使用以下内容创建和填充表(仅包含用于测试的 DROP 表):-
DROP TABLE IF EXISTS customer_tb;
CREATE TABLE IF NOT EXISTS customer_tb (
cus_id INTEGER PRIMARY KEY,
company TEXT,
firstname TEXT,
middlename TEXT,
lastname TEXT,
gender TEXT,
dob TEXT,
dateregistered TEXT,
contactno TEXT,
emailaddress TEXT,
description TEXT,
pic INTEGER
);
DROP TABLE IF EXISTS mediaadv_tb;
CREATE TABLE IF NOT EXISTS mediaadv_tb (
med_id INTEGER PRIMARY KEY,
mtype TEXT,
title TEXT,
dateadded TEXT,
previewimg BLOB,
filepath TEXT
);
DROP TABLE IF EXISTS contracts_tb;
CREATE TABLE IF NOT EXISTS contracts_tb (
contract_id INTEGER PRIMARY KEY,
status TEXT,
priority TEXT,
dateadded TEXT,
dateexpiration TEXT,
amountpaid REAL,
arearofcoverage TEXT,
customer_reference INTEGER REFERENCES customer_tb (cus_id)
);
-- Populate customers_tb
INSERT INTO customer_tb VALUES ("1","ACME","Fred","Tom","Smith","Male","1964-03-26","2018-0101","+54-1234 5678","fred@acme.email.com","Fred is called fred","1");
INSERT INTO customer_tb VALUES ("2","EMCA","Bert","Alan","Johns","Male","1976-10-11","2018-02-01","+54-4321 9876","bert@bertmail.com","competitive","2");
INSERT INTO customer_tb VALUES ("3","Quite Contrary Trading","Mary","Mary","QC","Female","2000-04-07","2017-02-15","+54-7654-3210","maryqc@easymail.com","Likes gardening","3");
--Populate mediaadv_tb
INSERT INTO mediaadv_tb VALUES ("1","type1","Freds photo","2018-01-01","X'00000001'","C:/images/customers/pic001");
INSERT INTO mediaadv_tb VALUES ("2","type2","Bertss photo","2018-02-01","X'00000002'","C:/images/customers/pic002");
INSERT INTO mediaadv_tb VALUES ("3","type3","Marys photo","2018-02-14","X'00000003'","C:/images/customers/pic003");
--Populate contracts_tb
INSERT INTO contracts_tb VALUES (null,"finalisation","Fast","2017-06-19","2018-05-01","123.45","Here and there","3");
INSERT INTO contracts_tb VALUES (null,"pending","medium","2017-06-19","2018-05-01","457.89","Over there","2");
INSERT INTO contracts_tb VALUES (null,"negotiating","TBA","2018-01-01","2020-01-01","567.65","Overall","3");
INSERT INTO contracts_tb VALUES (null,"building","Super fast","2017-11-01","2018-06-01","333.21","London","1");
结果表将是:-
以下查询基于将contracts 表与customers 表连接,然后customers 表与mediaadv 表连接:-
SELECT contract_id,
dateexpiration,
status,
priority,
firstname||' '||middlename||' '||lastname AS fullname,
company,
title,
previewimg
FROM contracts_tb
JOIN customer_tb ON customer_reference = customer_tb.cus_id
JOIN mediaadv_tb ON mediaadv_tb.med_id = pic
ORDER BY dateexpiration ASC
会导致:-
就目前而言,cutsomer_tb 和 mediaadv_tb 可以合并到一个表中。但是我没有这样做,因为完全不清楚这张桌子有什么用途。