在 SQL 的单元格中插入列表的最佳方法是什么?
Which is the best way to insert a list inside a cell in SQL?
我正在创建一个简单的社交网络作为一个大学项目,我在其中使用 xampp(因此,mysql 和 php)。
我面临着关于哪种是将对象列表作为行元素包含的最佳方法的两难选择。
我会更好地解释一下:在我的项目中,学生和教授都是唯一用户,他们每个人都有一份他们参与的项目列表,每个项目都有一份 industries/firms/companies 正在融资或只是观察项目;每个公司都有自己的简介。
我的困境是表示这种架构的最佳方式:
- 我是否应该为每个项目创建一个 table,其中只有一栏列出所有公司?
- 我是否应该创建一个引用 table,在每一行中包含单个项目的代码,以及与相关公司数量一样多的列(我不知道 sql 是否允许任意, 自动递增table 列数)?
- 我是否应该创建一个包含所有项目数据的 table 并在末尾添加一列,我将在其中压缩公司的所有代码?
- 其他我现在想不通的?
对我来说棘手的部分是我需要在所有项目中(不仅仅是公司)做四到五次类似的事情,并且有创建很多 table 的风险(和很多混乱) , 但同时如果我只将它们压缩在一个单元格中,解析列表会很复杂...
有什么建议吗?
你在不知不觉中问的是归一化的概念。值得研究。您的系统的简单设计可能如下所示:
people(id, name, ... type)
projects(id, name, ... )
people_projects(project_id, people_id)
companies(id, name, ...)
company_projects(company_id, project_id)
每位教授或学生在 people
table 中占一行。每个项目在 projects
table 中占一行,每个人在一个项目中,在 people_projects
table 中占一行。公司也一样。
然后您可以通过将 table 连接在一起来访问您的信息,例如,要让名称为 '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';
简单、强大的数据库模式和简单的数据访问。
我正在创建一个简单的社交网络作为一个大学项目,我在其中使用 xampp(因此,mysql 和 php)。
我面临着关于哪种是将对象列表作为行元素包含的最佳方法的两难选择。
我会更好地解释一下:在我的项目中,学生和教授都是唯一用户,他们每个人都有一份他们参与的项目列表,每个项目都有一份 industries/firms/companies 正在融资或只是观察项目;每个公司都有自己的简介。
我的困境是表示这种架构的最佳方式:
- 我是否应该为每个项目创建一个 table,其中只有一栏列出所有公司?
- 我是否应该创建一个引用 table,在每一行中包含单个项目的代码,以及与相关公司数量一样多的列(我不知道 sql 是否允许任意, 自动递增table 列数)?
- 我是否应该创建一个包含所有项目数据的 table 并在末尾添加一列,我将在其中压缩公司的所有代码?
- 其他我现在想不通的?
对我来说棘手的部分是我需要在所有项目中(不仅仅是公司)做四到五次类似的事情,并且有创建很多 table 的风险(和很多混乱) , 但同时如果我只将它们压缩在一个单元格中,解析列表会很复杂...
有什么建议吗?
你在不知不觉中问的是归一化的概念。值得研究。您的系统的简单设计可能如下所示:
people(id, name, ... type)
projects(id, name, ... )
people_projects(project_id, people_id)
companies(id, name, ...)
company_projects(company_id, project_id)
每位教授或学生在 people
table 中占一行。每个项目在 projects
table 中占一行,每个人在一个项目中,在 people_projects
table 中占一行。公司也一样。
然后您可以通过将 table 连接在一起来访问您的信息,例如,要让名称为 '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';
简单、强大的数据库模式和简单的数据访问。