二维数据库设计 -SQL 或 JSON



我需要数据库设计建议。我目前使用 SQLite(或者我可以切换到这些表的任何其他数据库)我有 A,B,C,D 列,行从 24 到 1008 . X 表示列是否为空。

我的第一个想法 ->我可以用 24 到 1008 做表 A、B、C、D(这看起来很愚蠢)

第二个想法 ->类似表 X(它有 id(FK) 到另一个表,我将在其中获得报告 ID),它有 24 到 1008,值将是 A、B、C 或 D,所以在这种情况下,示例查询是:从表 X 中选择 A 加入table_report ON table.report.id=X.id,其中 table_report.id=3;

所以通过 4 个查询,我将获得 A、B、C 和 D 的值,但是我现在很困惑

效率没什么大不了的自动取款机,但我不想设计一个愚蠢的东西。 我将用这些数据填充 HTML 表(Express+ejs)

我愿意接受任何建议

https://i.hizliresim.com/PO7PV5.png

用您提供的有限信息不可能给出最佳设计。但是你可能需要研究RDB设计的一些原则。

表示

图像中显示的内容的自然方式是作为唯一对的表,其中每对表示一个带有 X 的条目:

CREATE TABLE schedule (
  hour INTEGER PRIMARY KEY,
  tag TEXT PRIMARY KEY
);

请注意,我猜数字水平轴的名称为"小时",垂直 A - D 轴的名称为"tag",因为您没有提到这些值的实际含义。

您将使用触发器强制实施其他数据约束:

CREATE TRIGGER validate_schedule_insert BEFORE INSERT ON schedule
BEGIN
  SELECT CASE 
    WHEN NEW.hour NOT IN (24, 48, ...) OR NEW.tag NOT IN ("A", "B", "C", "D")
    THEN RAISE (ABORT 'Bad pair')
  END;
END;

表中的最大条目数为 4 * 42 = 164。您将检查给定条目是否具有以下 X:

SELECT * FROM schedule WHERE hour = ? AND tag = ?;

这将分别返回 X 或无 X 的 1 或 0 结果。

当然,您可以通过单个查询了解给定小时内带有 X 的所有标签:

SELECT tag FROM schedule WHERE hour = ?;

最新更新