如何为多个表创建通用ID?

时间:2014-03-13 23:04:14

标签: database postgresql

我是学习PostgreSQL的新手,所以我很感激所有的帮助。

我正在尝试创建多个表。我希望表的主键是区列+学校列的组合。

以下是我的表格设置方式的示例:

CREATE TABLE table1(
school VarChar(50), 
division VARCHAR(40), 
otherattribute (varchar70),
 etc.); 

CREATE TABLE table2(
school VarChar(50), 
division VARCHAR(40), 
otherattribute (varchar70), 
etc.); 

我想创建另一个符合

的表格
CREATE TABLE assignID(randomId INTEGER, school VarChar(50), division VARCHAR(40)); 

然后我想用我分配给该学校和部门组合的randomId替换我的任何表中的学校和部门组合的任何主键。有没有办法做到这一点?

2 个答案:

答案 0 :(得分:0)

很高兴看到您考虑为主键做出明智的选择。如何选择主键值可能是数据库未来可用性中最重要的因素。

您在这里真正做的是一个称为“数据库规范化”的过程。以下是对数据建模中一些重要的核心概念的一个很好的介绍(针对初学者):http://phlonx.com/resources/nf3/

希望有所帮助!

答案 1 :(得分:0)

我想出了一个解决方案,这是我的代码。

  1. 创建了一个带有序列号的table1和其他属性(学校和部门)我也想附加序列号。
  2. 我创建了我想要使用的所有表,我添加了我希望序列ID绑定的属性(school和div)然后我添加了列,但不是ID列本身。
  3. 我使用excel电子表格中的数据填充了所有关系。
  4. 我向所有不是表1的表添加了ID列。
  5. 我运行了这个脚本:

    UPDATE tables SET ID=table1.ID
    FROM table1
    WHERE tables.schoolName = table1.schoolName
    AND tables.divisionName = table1.divisionName; 
    

    这将与table1中的school和division组合绑定的序列号添加到具有类似组合的任何表中。

  6. 然后我放弃了所有桌子的学校和分区栏目。

  7. 我知道这不是最优化的解决方案,但它是我唯一能想到的解决方案。