说,
我有3张桌子。
User
,其中包含有关用户的基本信息。
SectionA
其中包含有关该用户的更多信息。
SectionB
其中还包含有关用户的更多信息。
每个用户只能有一个SectionA
和SectionB
数据。
我的想法是创建一个像这样的表格设计:
id name section_a_id section_b_id
1 matt 1 1
问题是,section_a_id
和section_b_id
无法自动递增,因为它们不是主键。
所以我尝试了另一种方法,并确定id
中的User
主键应该是引用section_a_id
和section_b_id`的外键。但我无法这样做,因为mysql只允许引用一个表。
那我该如何应对这种情况呢?
答案 0 :(得分:1)
好像你有:
所以外键必须在SectionA和SectionB表中,并且它们必须是User表主键。
答案 1 :(得分:1)
每个用户只能有一个SectionA和SectionB数据。
这就引出了为什么要将数据存储在不同的表中的问题。这有时是件好事 - 不同的用户可能在不同的表中。
一种解决方案是让SectionA
和SectionB
的主键成为UserId
的外来引用。是的,这是允许的。
另一种解决方案是在sectionA_id
表中使用sectionB_id
和users
。然后,您可以在每个引用的表中使用自动递增的ID。
答案 2 :(得分:1)
如果它是一对一的关系,将三个表组合成一个大表总是更容易,并且可以为Section表提供可为空的列。
我可以看到这种方法的一些积极观点:
答案 3 :(得分:0)
罕见用于1:1
webView.getSettings().setJavaScriptEnabled(true);
来获取空值。 纠正一些LEFT JOIN
误解
AUTO_INCREMENT
,也不一定是PRIMARY KEY
;它只需要是某个索引中的第一列。UNIQUE
列。通常最好使用“自然”PK - 某些列(或列的组合)本身就是AUTO_INCREMENT
。构建一对1:1表时,这是一种方式
UNIQUE
构建第一个表PRIMARY KEY
。AUTO_INCREMENT
构建第二个表,该表与另一个表相同,但不是PRIMARY KEY
。AUTO_INCREMENT
获取ID。