【问题标题】:MySQL: Storing variable pairs of values in multiple tablesMySQL:在多个表中存储变量值对
【发布时间】:2011-01-15 01:10:47
【问题描述】:

原问题here.

我正在 CodeIgniter 中创建一个具有配对值的表单 - 公司和 CEO。这个想法是,虽然最初在表单上只有一个公司字段和一个 CEO 字段,但有一个按钮供用户创建更多对公司-CEO 字段。此外,还有另一个页面,我将从表单中获取输入并输出如下内容:

CEO X is head of Company A

因此,这确实意味着我必须让这些对在某种程度上相互关联。根据之前的建议,我的Main MySQL 表将如下所示:

id int
Attribute1  blob
Attribute2  blob

然后我会有一个Company 表:

id int
Company text
foo blob

最后,我会有一个CEO 表:

id int
CEO text
foo blob

这个想法是为了简单起见,对于来自Main 的每条记录,应该很简单地确定哪些公司-CEO 对属于该记录,因为它们都共享相同的 id。每次填写并提交表单时都会创建该 ID。但是,我可以使用什么方法将每个公司与其对应的 CEO 联系起来?

【问题讨论】:

  • 通常,SQL RDBMS 会使用以下形式的 M-M 链接:[Companies] 1:M [Ceos_Companies] M:1 [Ceos]。只需在它们之间创建适当的 PK/FP 关系。但是,具体取决于需要完成/存储的 什么 会影响结构。例如。您是否需要记录随时间的变化?你能规定一个人只能成为一家公司的首席执行官吗?等等等等。

标签: mysql forms codeigniter


【解决方案1】:

除非您将其存储在 blob 字段中,否则您不会在主表中存储任何可以识别与记录关联的 CEO/公司的内容。如果你想让一个公司有多个 CEO,你需要

company table (id, companyname)
ceo table (id, ceoname)


company_ceos (ceo_id, company_id)

而且很可能会想要一些日期信息,这样您就可以说“John Doe”是 99 年到 08 年的 CEO,而“Jane Smith”是 09 年到现在的 CEO

【讨论】:

  • 每当用户点击提交时,都会创建一个 ID 并与整个记录相关联。我正在考虑在公司和 CEO 中都有一个类似的 id 列,以便所有公司/首席执行官都连接到同一个 id。此外,每位 CEO 只有一家公司,反之亦然。但是,主表(记录)可以有多个公司/CEO 对。
  • @Apophenia Overload ...那句话简直让我头疼:(
【解决方案2】:

在 CEO 和 Company 表中放置一个外键列,以将它们链接到 Record id:

Company:

id int
Company text
record int
foo blob

CEO:

id int
CEO text
record int
foo blob

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-13
    • 2012-12-02
    • 1970-01-01
    • 1970-01-01
    • 2012-02-16
    相关资源
    最近更新 更多