如何创建一个表与一个列关系的关系表

时间:2016-05-06 09:48:13

标签: mysql database database-design relational-database

嗨有专业人士,

我有一个关于为我的数据库创建表的问题,该表的主要目的是连接两个其他表,我需要有关如何设计此连接表的帮助。

我的数据库设计如下:

TABLE countries COLUMNS country_id, country_name, 
TABLE vehicles COLUMNS vehicle_id, vehicle_category

目前,在TABLE国家,我有2个国家,在TABLE车辆中,我有9辆车,未来两张表可能包含更多国家和更多车辆。

现在我需要连接这两个表,所以我将创建其他表,第三个表将包含country_id和vehicle_id,但这是我的问题开始的地方。

每个国家/地区应该包含所有车辆,但只包含一次,我的意思是说,一个国家/地区将包含2辆车辆具有相同的vehicle_id的情况!

我认为如何实施新表的结构(但重复的危险仍然存在!):

TABLE country_vehicle_relation COLUMNS id, vehicle_price, country_id, vehicle_id

现在我可以添加一些值(让我们忽略price和id列):

**country_id 1, vehicle_id 2**
country_id 1, vehicle_id 3
country_id 1, vehicle_id 4
**country_id 1, vehicle_id 2**
country_id 2, vehicle_id 2
country_id 2, vehicle_id 3
country_id 2, vehicle_id 4

到目前为止country_id 2并不包含任何重复,但country_id 1有一个危险的重复,随着它的增长,它更容易出错。

所以我不知道这种情况的最佳方法是什么,目前我将用PHP代码阻止这种情况,但我认为这还不够,我希望MySQL设计得最好。

我之前遇到过类似表格的问题,现在,我已经用易受错误的解决方案解决了这个问题,但现在再次出现这个问题,我想在部署应用程序之前重新设计我的表。

总而言之,我需要一张表来连接两个"对象",但是一个国家只包含车辆表中车辆的一个副本而没有同一车辆两次,也考虑两个表将会增长如今,明天将有9辆车,它将拥有12辆车,我将不得不在桌面上添加新的行,同样没有任何重复。

非常感谢您的答案!

1 个答案:

答案 0 :(得分:3)

在第三个表上添加UNIQUE Con​​straint。它会解决你的问题。

ALTER TABLE `country_vehicle_relation` ADD UNIQUE `unique_index`(`country_id`, `vehicle_id`);