如何设置1:MySQL中的许多关系

时间:2009-08-31 18:23:56

标签: php mysql database-design

我正在尝试建立一个可搜索的首字母缩略词数据库及其特定于某个行业的定义。自从我完成任何真正的编程以来已经有好几年了,所以我有点落后于学习曲线。

我正在用PHP编写代码,我正在使用MySQL作为数据库。如果在Postgres中可以更容易地做到这一点,我不反对切换DB,但我不能使用Oracle或任何其他商业系统。

所以这就是问题:

我想设置它,以便每个首字母缩略词可以:(1)适用于1个,多个或没有特定组织; (2)有一个或多个相关定义。

复杂性 - 至少在我的脑海中:D - 是因为可以想象一些组织可能只有一个单一的首字母缩略词,其中有多个定义都与该组织有关。同时,首字母缩略词也可能有一个或多个与其他组织相关的定义。

我是否过于复杂?

我想更好地了解如何在MySQL中设置表结构和关系 - 每个表中的字段和关系。

如果有人感到如此倾向于SQL语句会有所帮助,但我希望至少能够牢牢掌握数据库模式,这样我就可以创建表格并导入一些示例数据。

很多,非常感谢所有......

4 个答案:

答案 0 :(得分:1)

解决方案应包含4个表:Acronyms, Definitions, Organizations, and AcronymOrganization

Acronym(id, acronym, definition_id)
Definitions(id, definition)
Organizations(id, organization)
AcronymOrganization(id, acronym_id, organization_id)

答案 1 :(得分:0)

如果我理解您的问题,您可以使用三个单独的表格。首先,有一个首字母缩略词/定义表,然后有一个组织表。最后,有一个AcronymOrganization表,它只引用来自首字母缩写词表的键和组织表中的键。这样,您可以随意为组织提供尽可能多的首字母缩略词。

设置数据库后,需要使用几个内部联接来连接这三个表,只收集相应组织ID的首字母缩略词。

答案 2 :(得分:0)

我只是创建一个缩写词表,一个组织表和一个定义表。在定义表中放入两个外键:一个用于首字母缩略词表中的条目,另一个用于组织表中的条目。

答案 3 :(得分:0)

如果你想在tableA和tableB之间建立n:m关系,那么你需要第三个表。

表A.字段:ID,名称

表B.字段:ID,名称

表AB。字段:A,B(A是对A.ID的引用,B是对B.ID的引用)

  

[TABLEA] 1 - - - - * [TABLE_AB] * - - - - 1 [TABLEB]

示例

表a的内容:

ID Name
1  John
2  Mary
3  Piet

表b的内容:

ID Name
1  Microsoft
2  Google
3  Philips

表ab的内容:

ID Name
1  2
1  3
2  2
3  1
3  3

然后选择这样的一切:

select a.name,b.name 
from a,b,ab 
where a.id=ab.a and b.id=ab.b

结果:

a.name  b.name
John    Google
John    Philips
Mary    Google
Piet    Microsoft     
Piet    Philips