【发布时间】:2019-02-21 09:12:41
【问题描述】:
我在创建包含动态列数的表时遇到问题。
我有一个对象,我不知道确切的键数量:
var obj = {
data_1: 123,
data_2: 456,
data_3: 789,
(...)
};
此对象的每个键都应成为新表中的一列。 幸运的是,列数据类型始终是双精度。
我需要这样的东西:
"CREATE TABLE 'Data' (
FOREIGN KEY (id) REFERENCES other_table(id), // this is fixed
data_0 int, // this is fixed
Object.keys(obj) double
)"
这甚至可能吗?我找不到任何类似的东西。
如果有人能帮我解决这个问题,我会很高兴。
【问题讨论】:
-
将其作为 JSON 对象保存到数据库中?
-
这是唯一的可能吗?我宁愿为每个值设置一列。
-
你确定所有对象都有完全相同的键吗?如果是,您可以使用
Object.keys(data).map(k=>k+" int,\n")以外的内容生成 create table 的那部分。 -
如果不知道确切的用例以及如何处理数据的所有边缘情况,就无法真正回答这个问题。一般来说,如果您不知道
data_条目的数量,并且您需要能够查询为data_存储的数据,那么您需要有一个表格other_table(id), key, value和每个data_是表中自己的行。如果您有每个条目的最大键数,那么您可以考虑列而不是 NULL。 -
@bitifet 这很完美。谢谢!实际上并不知道您可以使用 map 在 sql 语句中“循环”。如果您可以将其发布为实际答案,我将标记为已接受。我的声明(有效)现在看起来像这样:
"CREATE TABLE new_table (ID int, FOREIGN KEY (ID) REFERENCES other_table (ID), data_0 int, "+ Object.keys(obj).map(k=>k+" double")+")"