1

我正在开发一个应用程序,它接受任何上传的 CSV 数据,将其与之前上传的其他数据集一起存储,然后根据用户选择他们想要返回的列/值生成输出(CSV 或 HTML)。数据库将根据需要自动扩展以处理新的/不同的列和数据类型。这优先于实体属性值模型。

示例 - 将这 2 个集合上传到空白数据库:

数据集 A:

name  | dept  | age   
------+-------+------
Bob   | Sales | 24
Tim   | IT    | 32

数据集 B:

name  | dept  | age  | salary
------+-------+------+--------
Bob   | Sales | 24   | £20,000
Tim   | IT    | 32   | £20,000

将以编程方式更改“数据”表,以便导入数据集 A 导致 3 个新创建的列(名称、部门、年龄)。导入数据集 B 会产生 1 个新创建的列(工资)。目前,忘记记录集是否应该合并以及没有标准化。

我遇到的问题是某些列也将具有查找值 - 假设 Dept 列将在将来的某个时候具有关联值,这些值给出该部门的地址和电话号码。对于 Salary 列、查找税组等也是如此。

这个大表中的列数不应该变得太高(几百),但应该足够多,以便用户通过管理面板管理查找表结构和值,而不是每次都需要开发人员参与。

问题是是为每列(值、描述)使用单独的查找表,还是使用引用列(列、值、描述)的组合查找表。通常我会选择单独的查找表,但在这里应用程序需要自动创建它们(例如lookup_dept、lookup_salary),然后在主SQL 语句中添加一个新连接。这将在用户的请求下完成,而不是在添加列时完成(以避免数百个空表)。

另一方面,组合查找表需要多次连接到数据表上,每次都选择列名。

个人查找对我来说似乎很有意义,但我可能完全找错了树。

4

3 回答 3

0

我同意单独的表格更可取。它更具可扩展性,更适合查询优化。此外,如果将来用户在特定查找中需要更多列,那么您可以添加它们。

是的,应用程序必须自动创建表和约束:我通常不会这样做,但是这个应用程序已经在更改现有表并向它们添加列,而我通常也不会这样做!

于 2009-03-23T18:07:38.433 回答
0

啊,“一个真正的查找表”的想法。我同意塞尔科先生的罕见情况之一。 谷歌搜索也

每次都有单独的桌子。在数据库意义上它是“正确的”。

我的理由(请不要规范化):表中的每一行仅存储一个实体。例如水果名称、汽车品牌、电话品牌。把它们混在一起是无稽之谈。我可以拥有一个名为“Apple”的手机品牌。呃……等一下……

于 2009-03-24T20:22:36.743 回答
0

你说,

这优先于实体属性值模型。

但在我看来,这正是你所需要的。

考虑使用 RDF 三元存储,并使用 SPARQL 进行查询。

忘记 SQL,这是 RDF 的工作。

于 2009-12-18T18:13:26.510 回答