【问题标题】:Complex Database table design复杂的数据库表设计
【发布时间】:2012-04-11 01:03:12
【问题描述】:

我有一个场景,我将不同的参数与数据库中的值一起保存。参数可以有多种类型。即

字符串, 整数, 多值

因为它是一对多的关系,所以我为它创建了两个表。

parameter
---------
id | name

parameter_value
---------------
id | parameter_id(F.K) | value

现在另一种参数类型被添加到需求中。即“地图”。所以一个参数可以是一个映射。地图可以有其他参数。 我在根据这个新要求设计数据库表时遇到问题。我需要创建新表还是更改现有表? 使用 IBM DB2。

【问题讨论】:

  • 您可能应该提及您正在使用的数据库平台,因为不同的系统可能有不同的功能适用于此。但本质上,您是在问如何/是否实现 EAV 模型。
  • 我不知道 EAV 模型,也不想实现它。只想使用简单的表。使用 DB2。
  • @imran:为什么不为每个类型使用单独的表,并使用另一个表将每个参数名称与类型名称相关联?
  • @imran tariq:我正在使用 Oracle 的 Berkeley DB Java 版 来存储键/值对,其中的值是由非结构化“参数”组成的映射。如果您的数据不是结构化的,那么 SQL 不一定是最佳选择。

标签: java database database-design map


【解决方案1】:

您说“参数可以有多种类型。即字符串、整数、多值”。但是像这样的表格

parameter_value
---------------
id | parameter_id | value

只能存储一种类型,可能是某种 varchar(n),其中 'n' 可能非常大。所以应该是整数的参数可能最终会变成“wibble”。

此外,“多值”在历史上不是关系或 SQL 数据类型。 (这正在改变。但改变很慢。)一些 SQL 平台支持某些类型的多值,但支持远非普遍。 PostgreSQL,选择我非常熟悉的一个,支持数组、JSON(我认为,在最新版本中)和键/值对(hstore 模块)。其中之一可能会对您有所帮助。我不确定。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-03-04
    • 1970-01-01
    • 2016-12-10
    • 2017-07-30
    • 1970-01-01
    • 2012-05-25
    • 1970-01-01
    • 2012-08-21
    相关资源
    最近更新 更多