文本中的主键还是将md5转换为整数?

时间:2015-09-05 01:40:00

标签: javascript database node.js performance postgresql

我正在使用不同的“开放数据”来源构建数据库。我将所有这些数据合并在一个表中以获取每日本地事件:

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

什么是最佳解决方案?

感谢您的帮助,如果不属于此,请抱歉。

0 个答案:

没有答案