构造一对多表php mysql的正确方法

构造一对多表php mysql的正确方法,mysql,database-normalization,Mysql,Database Normalization,假设我有一个法律领域的表,比如: ID Area 1 Children Law 2 EU law 3 Crime 还有律师,但每个律师都可以被分配多个法律领域,所以表格如下 ID Name Areas 1 John 1,3 2 Bob 2,3 我现在就是这样做的,但似乎不对 有没有更好的方法来组织这些数据 我想我可以有第三个表,上面两个表之间有关系,例如: AreaID LawyerID 1 1 3 1 2 2 3 2 哪一个更好?为什么

假设我有一个法律领域的表,比如:

ID Area
1  Children Law
2  EU law
3  Crime
还有律师,但每个律师都可以被分配多个法律领域,所以表格如下

ID Name Areas
1  John 1,3
2  Bob  2,3
我现在就是这样做的,但似乎不对

有没有更好的方法来组织这些数据

我想我可以有第三个表,上面两个表之间有关系,例如:

AreaID LawyerID
1      1
3      1
2      2
3      2

哪一个更好?为什么原始选项在各个方面对我来说都不那么麻烦?

在第一个解决方案中,您通过字符串连接来表达数据语义。这有严重的缺点:

  • 查询数据会很麻烦(例如,让所有执行刑法的律师都参与进来)

  • 向数据库添加和删除区域很麻烦(因为您必须进行字符串解析和连接)

  • 您必须自己注意数据的一致性(例如,区域表中必须存在所有区域ID)

基本上,除了一般的数据存储和检索之外,您将失去DBMS提供的所有功能。在重新实现此功能的情况下,您将得到糟糕的应用程序代码、糟糕的性能以及最有可能的数据不一致性


让数据库为您做它能做的事情,但您必须满足其结构要求。

当然是后者。去争取吧第一个问题会让你在尝试获取和使用它时感到非常头疼。一个律师可以被分配到多个法律领域,而一个法律领域可以分配多个律师。这只是律师和法律领域之间存在多对多关系的另一种说法。多对多关系需要第三个表(链接表)来建立该关系。链接表将始终包含被链接的两个表的主键。这两个主键通常可用作链接表的复合主键。链接表中的每个主键都是指向原始表的外键。Hi可能重复。你的问题表明你缺乏基本知识。阅读关于信息建模、关系模型和数据库设计的教科书。此外,这是一个常见问题,你可以很容易地谷歌。总是用谷歌搜索你的问题/问题/目标/设计的许多清晰、简洁、具体的版本/变体/措辞,包括和不包括你的具体字符串/名称/代码,并阅读许多问题的答案,这将为你进一步的谷歌搜索提供信息。如果你在应用所学知识并重复这一点后没有找到答案,那么就提出一个问题。使用最佳搜索作为标题。PS请参见和。