我正在使用不同的“开放数据”来源构建数据库。我将所有这些数据合并在一个表中以获取每日本地事件:
CREATE TABLE events ( uid bigint PRIMARY KEY,
title text NOT NULL,
description text,
tel text,
web text,
mail text,
more_info text,
place text,
owner integer,
owner_name text,
category text,
tags text[],
date_start timestamp NOT NULL,
date_end timestamp NOT NULL,
approx smallint,
latlong point NOT NULL
);
对于uid
,我只是使用来自资源的等效id
并直接使用它。
我每天更新数据库,获取当天的事件,检查ID是否已经在uid
。
我使用TEMPORARY TABLE
合并数据,同时检查重复(用真实内容替换“columnsDefinition”,“columnsName”和“values_n”以保持简短,你明白了)
BEGIN;
CREATE TEMPORARY TABLE staging_my_table ("columnsDefinition");
INSERT INTO staging_my_table ("columnsName") VALUES ("values_n")
INSERT INTO events ("columnsName") SELECT "columnsName" FROM staging_my_table staging WHERE (NOT EXISTS ( SELECT 1 FROM events WHERE staging.uid = events.uid)) AND (date_end > CURRENT_DATE);
DISCARD TEMP;
COMMIT;
到目前为止一切都很完美。 但是一个新的数据源使用id的文本(例如FMAMID031V507DMT),我猜它是md5。
我应该将我的uid
列从bigint更改为文本吗?因为我用它作为主键(可能是我的错误),它还能用吗?性能怎么样?
也许我应该找到一种方法将这些id转换为整数,但我不知道如何做到这一点。
也许我需要从另一列生成自己的uid
?
什么是最佳解决方案?
感谢您的帮助,如果不属于此,请抱歉。