Mysql表结构和设计

时间:2010-10-04 17:24:13

标签: sql mysql database-design data-modeling

我有两张桌子,我的工作方式与以下概念相同......

当任何记录插入第一个表的'id'时('id'是唯一的并且auto_increment),我想使用这个id值进一步插入我的第二个表(这意味着id将是外键)。如何我应该设计我的桌子吗?

  1. 如果我正在插入值并进一步提取最后插入的值以再次插入第二个表,那么单个插入将执行更多查询,这可能需要更多时间在mysql中执行。

  2. 如果我将使用额外的表(counter_id_table)来保持id值并自动增加。当任何新记录将首先插入时,我将获取'counter_id_table'的值,这个值将是我的第一个表的id,这个值将是第二个表中的外来id。当我再次从'counter_id_table'获取值时,我将在一个增量后更新。

  3. 我应该如何设计我的表以便更好地执行?

1 个答案:

答案 0 :(得分:1)

第一种选择是通常如何做。在插入查询之后,您可以使用MySQL的mysql_insert_id()来检索您插入的条目的ID。不要担心速度或负载,这种情况发生在几分之一秒内,MySQL可以在睡眠状态下执行此操作。

所以你会得到这样的东西:

`user`
- id
- name
- etc

`user_stuff`
- id
- userId // foreign key
- stuff
- etc

$sql = "INSERT INTO user (name) VALUES ('foo')";
mysql_query($sql) or die(mysql_error());

$userId = mysql_insert_id();

$sql = "INSERT INTO user_stuff (userId, stuff) VALUES ($userId, 'stuff')";
mysql_query($sql) or die(mysql_error());