首先让我解释一下我的情况,我有一个名为用户的表格,用于存储用户信息。
+----------+-------------+------+-----+---------+-------+
| 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来完成这一点,这样我就不必在代码部分关注它了。
非常感谢。
答案 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_id
和country_id
之间的一对多关系。有了这个,您可以轻松处理用户和国家/地区的关它们组合的唯一键使数据访问速度更快,并避免重复。