【问题标题】:I need these 3 ID's to work for me in SQL我需要这 3 个 ID 才能在 SQL 中为我工作
【发布时间】:2018-03-20 01:56:50
【问题描述】:

我的项目名称是 Media Advertisements DB。我希望这些以一种相当相应和简洁的方式显示在 Java GUI 中。就像有一些选项可以让用户查看这些不同的表格,但也可以将它们全部显示,但是当我显示这些时,这是不和谐的......如何使结构更好?

这是我制作的表格:

【问题讨论】:

标签: java database sqlite netbeans


【解决方案1】:

假设合同仅限于单个客户,那么您可以在合同表中有一个列来引用该客户。

我认为这是客户的照片,如果是这样,则无需从合同中引用此照片,因为引用客户的合同足以获取照片。

例如,如果使用以下内容创建和填充表(仅包含用于测试的 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 可以合并到一个表中。但是我没有这样做,因为完全不清楚这张桌子有什么用途。

【讨论】:

  • 天哪!你实际上做了我想要发生的事情,但无法看到!谢谢!那么在所有这三个中,您认为哪一个应该是主要的父表?我知道其中任何一个都应该是父表。
  • 嗨,MikeT 先生?为了进一步解释,状态由两个(活动或非活动)组成,然后媒体类型可以是:视频、音频、传单。不知何故,你能帮我区分这三个表之间的适当关系吗?
  • customer_table 的主要用途是显示客户的详细信息,然后是 media_table,其中一种媒体将引用一位客户,然后contracts_table 显示所有交易以及包含在一份合同中的 media_id 和 customer_id。我正在考虑非活动合同,当它按到期日期排序时非常整洁,但只有通过状态排序才会相应地对其进行排序......
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-11-15
  • 2014-01-08
  • 1970-01-01
  • 2016-07-28
  • 2017-08-14
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多