外键和基本关系表

时间:2012-04-21 21:35:21

标签: mysql database orm foreign-keys sqlalchemy

我有一个基本的数据模型,我想在MySQL中实现。我将使用mysqldb和SQLalchemy来处理数据部分,从一些XML中获取一些数据。

我不确定如何实现我想做的事情,我想知道是否有人能指出我正确的方向。

我有几张表,每张表都包含一部分数据。

Table 1 - recordTitle, recordID, recordDate
Table 2 - recordProp1, recordProp2, recordProp3
Table 3 - recordPropA, recordPropB, recordPropC

所有表在它们自己的空间中都是唯一的,但T1可以有许多T2和T3,而T2 / T3可以属于许多T1。合理?

我认为解决这个问题的方法是获得第4张表: -

表4 - T1ref,T2ref,T3ref

并在T1-3中有一个名为TnRef的新colunm,它基本上是该表的主键。

  1. 这听起来像是一种明智的做法吗?
  2. 我想在填充数据时,我需要检查每个表条目的唯一性,如果是,我捕获TnRef值,如果不是,我插入新行并在此之后收集TnRef值。一旦我有了价值,我就可以填充将所有内容链接在一起的T4行。
  3. ORM是否是正确的工具?

1 个答案:

答案 0 :(得分:2)

  1. 对于你所描述的多对多关系,是的,我认为有一个第四个表连接T1记录与T2(s)和T3(s)是有意义的。我想你会想要为T2和T3添加一个关键列,以使T4能够正确存储链接。

  2. 我假设您的意思是T2和T3将会扩展,并且您的应用程序将在(例如)将{recordProp1 = someval,recordProp2 = someotherval}添加到T1中的给定记录时发出请求。如果是,那么是的,你想先在T2上进行查找,然后根据T1和T2的键将其插入到T4中。

  3. 我认为ORM绝对是正确的工具。当然,您首先要确保MySQL中的所有外键关系都是正确的。但是SqlAlchemy可以处理多对多关系。看看:http://docs.sqlalchemy.org/en/latest/orm/relationships.html#many-to-many