可定制的数据库

时间:2010-10-19 08:21:26

标签: c# asp.net database database-design

如果我想创建一个可以“添加”,“删除”和“编辑”表和列的数据库,那么最好使用哪种数据库/技术?

我希望它可扩展且快速。

我应该使用一个表和四列(Id,Table,Column,Type,Value) - 有没有关于此的好文章。或者还有其他解决方案吗?

可能有三个表:一个用于保存表,一个用于保存列,另一个用于值?

也许某人已经为此创建了一个数据库?

我的要求是我正在使用.NET(我想数据库不一定是在Windows上,但我更喜欢这个)

1 个答案:

答案 0 :(得分:0)

由于(在对问题的评论中)您意识到“内部平台效应”的缺陷,因此这是一个非常常见的要求 - 尤其是存储自定义用户定义列。事实上,大多数团队都需要这个。尝试过各种方法之后,我发现最成功的方法是保持额外的数据与记录一致 - 特别是,这使得获取数据变得简单,而无需额外的步骤,如外部表上的第二个复杂查询,这意味着所有值都会共享诸如timestamp / rowversion之类的内容以实现并发。

特别是,我发现了一个CustomValues列(例如文本或二进制文件;通常是json / xml,但可能更具异国情调)是一种非常有效的工作方式,可以作为一个属性包用于其他数据。并且你不来解析它(或者确实是SELECT它),直到你知道你需要额外的数据。

您需要的只是将命名键绑定到预期类型的​​方法,但无论如何都需要元数据

但是,我会强调使数据可移植的重要性;不要(例如)存储任何特定的平台定制序列化(例如,.NET的BinaryFormatter) - 像xml / json这样的东西都可以。

最后,您的RDBMS也可以使用此列;例如,SQL Server具有xml数据类型,允许您对xml数据运行特定查询和其他操作。你必须自己决定这是一个帮助还是一个障碍; p


如果您还需要添加表,我想知道您是否真正将RDBMS用作RDBMS;在那个点我会考虑从RDBMS切换到document-database,例如CouchDB或Raven DB