【发布时间】:2010-03-03 16:55:03
【问题描述】:
假设您正在设计一个应用程序,该应用程序根据要求允许用户灵活地创建自定义类型(用于管理他的数据,无论它是什么)。处理这个问题的一种方法是定义一个模式,它允许我们使用元数据来定义这些类型。这通常意味着生成的数据库模式将具有某种存储键/值对(属于类型实例的属性)的方式,其中值部分通常存储为字符串(无论列的基础数据类型如何)。仅此一项就提出了许多问题。我读过 some frown upon 使用 db 来跟踪键/值对。
我遇到的主要问题是它如何影响查询。例如,假设用户想要创建一个名为 Event 的类型,其中包含以下列:event_name、description、start_at 和 end_at(日期时间)。使用所有值都是字符串的键/值对使查询对参数值的格式更加敏感;因此,查询两个日期之间的一组事件并不像我们使用实际的日期时间列那样简单。
这促使我考虑可以适应自定义类型的替代设计。第一个想到并且我最喜欢的是使用数据库本身来定义这些自定义类型。也就是说,与其创建必须定义所有类型的单独的元表集,不如简单地允许用户在数据库中创建/修改他自己的表(所有这些表都以他的用户名为前缀:例如usertable-johndoe-album)。我在这种方法中看到的最突出的问题是最终可能存在的表的绝对数量。我想知道大多数开源数据库(MySQL、Postgres 等)是否对它们可以不受阻碍地管理多少表有硬性或实际限制。也就是说,我知道大多数生产就绪的数据库都经过调整以处理数百万条记录,但我不知道它们是否能够处理数十万个表。有人知道吗?
鉴于允许用户创建自己的类型的要求,您更喜欢键/值对还是利用数据库本身?或者如果您有其他模式/想法,请描述一下。
【问题讨论】:
标签: design-patterns database-design customization