【问题标题】:Which is the best way to insert a list inside a cell in SQL?在 SQL 的单元格中插入列表的最佳方法是什么?
【发布时间】:2015-07-01 23:23:06
【问题描述】:

我正在创建一个简单的社交网络作为大学项目,我在其中使用 xampp(以及 mysql 和 php)。
关于将对象列表作为行的元素包含在内的最佳方式,我面临着两难境地。

我会更好地解释一下:在我的项目中,其中包含学生和教授作为唯一用户,他们每个人都有他们参与的项目列表,每个项目都有一个行业/公司/公司的列表,这些行业/公司/公司正在融资或简单地观察项目;每家公司都有自己的简介。

我的困境在于哪种是表示这种架构的最佳方式:
- 我应该为每个项目创建一个表,其中只有一列列出所有公司吗?
- 我是否应该创建一个参考表,在每一行中包含单个项目的代码,以及与其相关的公司数量一样多的列(我不知道 sql 是否允许任意、自动递增的列数) ?
- 我是否应该创建一个包含所有项目数据的表并在最后添加一个列来压缩公司的所有代码?
- 其他我现在无法弄清楚?

对我来说棘手的部分是我需要在所有项目中做四五次类似的事情(不仅对公司而言),有创建很多表(和很多混乱)的风险,但同时如果我只将它们压缩在一个单元格中,那么解析列表的时间会很复杂......
有什么建议吗?

【问题讨论】:

  • 你可以考虑serialization
  • 标准化设计似乎是合适的。如果你不知道那是什么意思,我听说过这本书的好东西,数据库设计为凡人。
  • 一个项目可以有很多学生和教授,一个学生或教授可以有很多项目。所以您立即拥有三张桌子 - peopleprojectsproject_people。最后一个只是通过外键将人员映射到项目。现在你有公司,我假设他们可以资助很多项目,一个项目可以有很多公司资助他们。相同的安排。添加一个companies 表和一个关系表company_projects

标签: mysql sql list xampp


【解决方案1】:

您在不知道的情况下询问的是规范化的概念。值得研究。您的系统的简单设计可能如下所示:

people(id, name, ... type)
projects(id, name, ... )
people_projects(project_id, people_id)
companies(id, name, ...)
company_projects(company_id, project_id)

每个教授或学生都是people 表中的一行。每个项目都是projects 表中的单行,每个项目上的人都是people_projects 表中的单行。公司也一样。

然后,您可以通过将表格连接在一起来访问您的信息,例如,要让所有学生参与名为“Project X”的项目,您可以进行简单的内部连接:

select *
  from projects p
    inner join project_people pp
      on p.id = pp.project_id
    inner join people pl
      on pp.people_id = pl.id
  where p.name = 'Project X'
    and pl.type = 'student';

简单、健壮的数据库架构和简单的数据访问。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-12-07
    • 2010-09-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-05-09
    • 2013-09-15
    相关资源
    最近更新 更多