【问题标题】:Foreign keys and basic relational tables外键和基本关系表
【发布时间】:2012-05-03 00:59:39
【问题描述】:

我有一个要在 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 - T1ref、T2ref、T3ref

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

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

【问题讨论】:

  • 那是实际数据库的抽象符号——我更关心如何在 MySQL 中实现 FK 和 PK 的机制。据我所知,我认为实际的数据模型是标准化的。

标签: mysql database orm foreign-keys sqlalchemy


【解决方案1】:
  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

【讨论】:

  • 太棒了,谢谢 - 我确实计划在所有三个表中都有键列,并使用 t4 作为“经纪人”来保存我想要捕捉的关系。感谢您的时间,我会阅读您的链接。
猜你喜欢
  • 2015-10-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-10-10
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多