将一个表插入另一个表中

时间:2014-03-08 10:18:53

标签: mysql sql database database-design triggers

首先让我解释一下我的情况,我有一个名为用户的表格,用于存储用户信息。

+----------+-------------+------+-----+---------+-------+
| Field    | Type        | Null | Key | Default | Extra |
+----------+-------------+------+-----+---------+-------+
| user_id  | varchar(10) | NO   | PRI | NULL    |       |
| username | text        | NO   |     | NULL    |       |
| password | text        | NO   |     | NULL    |       |
| name     | text        | NO   |     | NULL    |       |
| email    | text        | NO   |     | NULL    |       |
| status   | varchar(15) | NO   |     | active  |       |
+----------+-------------+------+-----+---------+-------+

一张名为 country

的表格
+--------------+-------------+------+-----+---------+-------+
| Field        | Type        | Null | Key | Default | Extra |
+--------------+-------------+------+-----+---------+-------+
| country_id   | varchar(10) | NO   | PRI | NULL    |       |
| country_name | text        | NO   |     | NULL    |       |
| country_rate | double      | NO   |     | 0.2     |       |
+--------------+-------------+------+-----+---------+-------+

现在,我需要一个流程来映射分配给特定用户的国家/地区。 例如:

允许user_001使用country_001,country_002,country_003 n

允许user_002使用country_003,country_008

依旧......

实现上述目标的最佳方法是什么?

我想的是有一个名为say assignment的表,它将包含以下字段:

assignment_id (primary key)

user_id (foreign Key)

country_001 (bool)

country_002 (bool)

...
...

country_010 (bool)

我不确定这是否是最佳方法,但即使我这样做,我仍然坚持如何改变分配结构,在国家表中的每次插入(添加BOOL字段)使用新创建的country_id作为列名称进行分配。

我希望我能够解释这种情况。我知道我可以通过语言支持代码(PHP,C ++等)来实现,但我在想是否可以使用某种TRIGGER来完成这一点,这样我就不必在代码部分关注它了。

非常感谢。

1 个答案:

答案 0 :(得分:0)

这样定义user_countries表是一个更好的选择:

user_id fk on users(user_id)
country_id fk on countries(country_id)
unique key on ( user_id, country_id ) -- composite unique key

我不确定您为什么要在用户 - 国家/地区关系表中定义10列 但是,您只需使用外键定义country_id而不是10列 user_idcountry_id之间的一对多关系。有了这个,您可以轻松处理用户和国家/地区的关它们组合的唯一键使数据访问速度更快,并避免重复。