我需要一个数据库设计建议。我目前正在使用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表格
我愿意接受任何建议
答案 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 = ?;