如何使用自动递增的整数主键来组合多个文件?

时间:2015-06-26 05:11:17

标签: mysql postgresql sqlite

如果要将表连接到单独的文件,如何在表上设置有效的自动递增整数主键?我每天都会得到这样的数据:

互动数据:

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行匹配。或者我应该按照三列复合键的方式继续这样做?

2 个答案:

答案 0 :(得分:2)

(我假设,因为您发布了此帖子的标记垃圾邮件;您可以自行翻译其他数据库系统。

听起来您正在使用复杂的自然键(例如(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

这个问题与你的问题无关。但解决方案是一样的。