来自字符串的计算id作为数据库键

时间:2016-12-31 15:15:34

标签: sql database postgresql

我有一个XML接口,其中包含我需要解析然后插入数据库的条目。条目具有所有必需的信息,但我想规范化数据库,因此尝试从基本信息生成对象。

这是基本条目的一个例子:

<entry url="http://example.com" author="Ex1" title="Title" category="Category1"/>

我基本上需要以下基础对象(伪代码):

class entry:
    entryID; (PK)
    url;
    title;
    authorID; (FK)
    categoryID; (FK)

class author:
    authorID; (PK)
    name;

class category:
    categoryID; (PK)
    name;

这当然会引起我需要在插入实际条目之前插入类别和作者entites而不违反参照完整性约束的问题,但我不想将作者和类别写入数据库立即恢复他们的新密钥并将其写回条目,因为这会显着降低性能。

是否存在针对此类问题的推荐方法,还是应该根据类别和作者的名称计算哈希值?

1 个答案:

答案 0 :(得分:0)

您可以使用WITH查询首先在表中插入数据,RETURNING其键,然后插入另一个表:

WITH author AS (
    INSERT INTO d_author (name)
    values ($1) RETURNING id)
insert to maintable (id)
    select id from author

(示例请输入内容,有关WITH查询的详细信息,请参阅https://www.postgresql.org/docs/current/static/queries-with.html。)