二维数据库设计-SQL或JSON

时间:2017-11-06 04:06:30

标签: json database sqlite rolap

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

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

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

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

效率不是一个大问题,但我不想设计一个愚蠢的东西。我将使用这些数据(Express + ejs)填充HTML表格

我愿意接受任何建议

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

1 个答案:

答案 0 :(得分:0)

使用您提供的有限信息,无法提供最佳设计。但您可能需要研究RDB设计的一些原则。

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

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

注意我猜的是"小时"对于数字水平轴和"标签"对于垂直A - D轴,因为你没有提到这些值实际上是什么。

您可以使用触发器强制执行其他数据约束:

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 = ?;