数据库设计即时创建表

Luk*_*101 0 mysql sql sql-server oracle postgresql

我需要动态地在数据库中创建动态表.例如,在数据库中我将​​有名为的表:

Table
Column
DataType
TextData
NumberData
DateTimedata
BitData
Run Code Online (Sandbox Code Playgroud)

在这里,我可以在名为table的表中添加一个表,然后我可以在columns表中将所有列添加到该表,并将数据类型与每个列相关联.

基本上我想创建表而不在数据库中实际创建表.这甚至可能吗?如果是这样,你能指引我到正确的地方,这样我可以研究吗?另外,我更喜欢sql server或任何免费的数据库软件.

谢谢

Jus*_*ave 14

您所描述的是实体 - 属性 - 值模型(EAV).设计数据模型是一种非常糟糕的方式.

虽然数据模型非常灵活,但查询这样的数据模型非常复杂.n如果要选择或过滤n不同的属性,通常最终必须自动加入表时间.这变得缓慢而且相对较快地变得非常难以优化.

此外,您通常最终会构建数据库或ORM将提供的许多功能.

  • PostgreSQL的`hstore`功能提供了一种方法来实现这种方式.`hstore`s基本上是字符串字典,即键/值映射,它存储在数据库字段中,就像任何其他数据类型一样.见http://www.postgresql.org/docs/current/static/hstore.html.这比EAV要好得多. (2认同)

Ben*_*rns 8

我不确定你遇到的真正问题是什么,但你提出的解决方案是"数据库中的数据库"反模式,这让很多人感到畏缩.

根据您查询数据的方式,如果您要构建类似于您计划的内容,则需要一组分段查询,这些查询在中间件(慢速)或一个怪物单片查询中加入(或者如果一个甚至是可能的话,会减慢或创造大规模的指数膨胀.

如果必须动态创建表,学习CREATE TABLE ALTER TABLEDROP TABLEDDL语句为您所使用的特定的数据库引擎.更好的是,找到一个能为你做到这一点的ORM.如果你真正的问题是需要存储非结构化数据,请查看MongoDB,Redis或其他一些NoSQL变种.

我的最后建议是将你想要解决的实际问题写成一个单独的问题,你可能会学到很多东西.