mysql - 未知列的结构数据库

标签 mysql sql database database-design

我正在构建一组相互关联并包含彼此信息的数据库。例如,数据库的主要功能之一是记录路径和端点;

路径 1 穿过端点 point_1、point_2、point_3、point_4 和 point_5
路径_1 = p1-p2-p3-p4-p5
路径 2 穿过端点 point_1、point_2 和 point_5
Path_1 = p1-p2-p5


数据库结构:

path_id | start_point | point_1 | point_2 | point_3 | end_point |
--------|-------------|---------|---------|---------|-----------|
    1   |     p_1     |   p_2   |   p_3   |   p_4   |    p_5    |
    2   |     p_1     |   p_2   |         |         |    p_5    |

等等……

我的问题是我并不总是知道它会跨越多少个点。可能是 5 个,也可能超过 15 个。如何构建数据库以便分配可变数量的点? (路径顺序很重要)

除此之外,每个点对点路径还有一个与之相关联的 ID。例如 p1-p2 = 0001p2-p3 = 0002

另外,我将如何构建 SQL 语句?在某些时候,我想查询所有穿过特定点的路径,如果点太多,恐怕我不知道如何创建这么长的语句。

这可能是针对此需求的错误数据库设置,欢迎任何其他建议

最佳答案

列代表元数据,而您的点实际上是数据。更好的设计可能是:

path_id | point 
--------|-------------
    1   |  p_1     
    1   |  p_2     
    1   |  p_3     
    1   |  p_4  
    1   |  p_5     
    2   |  p_1  
    2   |  p_2     
    2   |  p_5  

当然,您应该考虑为附加信息添加列(即“订单”,如果相关),并为这两列合并添加一个 UK。

SELECT 语句将是 SELECT * FROM table WHERE point = 'p_1';

关于mysql - 未知列的结构数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33243372/

相关文章:

c# - SQL 语法错误;请查看与您的 MySQL 服务器对应的手册

javascript - 在 JavaScript 中使用 PHP 的 DateTime

sql - 需要高效的 SQL 将物化 View 中的行数与另一个物化 View 连接起来

mysql - 无法添加外键约束为主外键

java - 避免使用大量 Java 类共享字段的重复代码

mysql - 如果count=0,如何包含SQL计数的结果?

MySQL : Multiple row as comma separated single row

mysql - SQL 填充键/值表

sql - 在 SQL 中比较月份和年份

mysql - 使用单个父数据库进行跨数据库 UID 管理?