如果要将表连接到单独的文件,如何在表上设置有效的自动递增整数主键?我每天都会得到这样的数据:
互动数据:
Date | PersonID | DateTime | CustomerID | Other values...
主键是PersonID + DateTime + CustomerID。如果我有一个整数键,我该如何将它与另一个表关联?我想知道特定人员与特定客户交互的行,以便将这些数据绑定到一个主文件中。
调查返回数据:
Date | PersonID | DateTime | CustomerID | Other values...
我通常在将pandas加载到数据库之前首先处理所有原始数据。其他一些文件也没有日期时间戳,只有日期。一个人很少在同一天与同一个客户进行交互,因此我通常会删除所有存在重复项的行(所有实例),因此我的连接样本纯粹是唯一的。
其他数据:
Date | PersonID | CustomerID | Other values...
我无法想象如何设置它所以我知道“交互数据”表中的第56,547行与“调查返回数据”表中的第10,982行匹配。或者我应该按照三列复合键的方式继续这样做?
答案 0 :(得分:2)
(我假设postgresql,因为您发布了此帖子的标记垃圾邮件;您可以自行翻译其他数据库系统。
听起来您正在使用复杂的自然键(例如(PersonID,DateTime,CustomerID)
)加载数据,并且您不希望在相关表中使用自然键,可能是出于存储空间原因。
如果是这样,对于您的辅助表,您可能希望CREATE UNLOGGED TABLE
一个与原始输入数据匹配的表。 COPY
将数据放入该表中。然后在最终目标表中执行INSERT INTO ... SELECT ...
,使用自然键映射连接到表。
例如,在您的情况下,您有表interaction
:
CREATE TABLE interaction (
interaction_id serial primary key,
"PersonID" integer
"DateTime" timestamp,
"CustomerID" integer,
UNIQUE("PersonID", "DateTime", "CustomerID"),
...
);
和表survey_return
只是对interaction_id
的引用:
CREATE TABLE survey_return (
survey_return_id serial primary key,
interaction_id integer not null foreign key references interaction(interaction_id),
col1 integer, -- data cols
..
);
现在创建:
CREATE UNLOGGED TABLE survey_return_load (
"PersonID" integer
"DateTime" timestamp,
"CustomerID" integer,
PRIMARY KEY ("PersonID","DateTime", "CustomerID")
col1 integer, -- data cols
...
);
并COPY
将您的数据加入其中,然后执行INSERT INTO ... SELECT ...
以将加载的数据加入interaction
表,并将结果与派生的interaction_id
一起插入而不是原始自然键:
INSERT INTO survey_return
SELECT interaction_id, col1, ...
FROM survey_return_load l
LEFT JOIN interaction i ON ( (i."PersonID", i."DateTime", i."CustomerID") = (l."PersonID", l."DateTime", l."CustomerID") );
如果输入调查返回中存在未出现在interaction
表中的自然键元组,则会因null违规而失败。
答案 1 :(得分:1)
总有很多方法。这可能是一个。
潜在客户(表:cust)走进汽车经销商并试驾3辆汽车(表:汽车)。在cust_car表中cust和car之间的交叉点/交汇表。
3张桌子。每个都有int autoinc。
阅读我为某人写的答案。如果您需要帮助,很乐意为您的餐桌工作。
SQL result table, match in second table SET type
这个问题与你的问题无关。但解决方案是一样的。