防止1:n数据库关系不一致

时间:2016-05-05 10:58:42

标签: mysql foreign-keys foreign-key-relationship database-normalization

我有以下mySQL数据库:

enter image description here

每个用户都有一个unqiue id idMember ,并且可以有多个地址(1:n关系)。每个地址都有一个唯一的ID idAddress dbAddress 的条目 idMember 是指向 dbUser idMember 的外键。

此外,每对 idLang idMember 都会映射到 idAddress

我想确保每对( idLang idMember )映射到 idAddress ,其中 idAddress 属于由 idMember 给出的用户。我的问题是,我该如何确保这一点?

这是一个示例,其中[x]表示数据库条目:

DBUSER

[user1] [user2]

dbAddress

[1,user1] [2,user1] [3,user1] [4,user2]

在这种情况下,应该可以添加条目 [1,user2,4]到地图

但应该拒绝添加条目

[1,user2,3]或[1,user1,4]。

我可以保证使用外键或者在mySQL中没有违反这种一致性的东西吗?

1 个答案:

答案 0 :(得分:2)

是否需要有3张桌子?如果是这样,请不要将idMember放在第三个表中。使用它与dbAddress的关系来获取该值。

每个idAddress有多个idLang?如果不是,我只会组合你的dbAddress表和映射表。

另外,谁选择了表和列的命名约定?大多数情况下,您不需要将db放在表名前面,通常表中的id应该只是ID,而外键通常是更长的something_id。我发现这可以使查询更具可读性,并为发生的事情提供更好的线索。我确信有一百万个意见,但如果你只是创建这个数据库,你可能想要考虑它。