Postgresql 如何将具有n列的表映射到数据库?
我们目前正在使用PostgreSQL,现在必须在数据库中保存一些表。表一经创建就不会更新,但可能会被过滤 表格本质上是动态的,因为可能有Postgresql 如何将具有n列的表映射到数据库?,postgresql,database-design,cassandra,nosql,data-modeling,Postgresql,Database Design,Cassandra,Nosql,Data Modeling,我们目前正在使用PostgreSQL,现在必须在数据库中保存一些表。表一经创建就不会更新,但可能会被过滤 表格本质上是动态的,因为可能有n列 因此,一个表格将是: |------|--------|--------| | NAME | DATA 1 | DATA 2 | |------|--------|--------| |------|--------|--------|--------|--------|--------| | NAME | DATA 1 | DATA 2 | DATA
n
列
因此,一个表格将是:
|------|--------|--------|
| NAME | DATA 1 | DATA 2 |
|------|--------|--------|
|------|--------|--------|--------|--------|--------|
| NAME | DATA 1 | DATA 2 | DATA 3 | DATA 4 | DATA 5 |
|------|--------|--------|--------|--------|--------|
另一个表格是:
|------|--------|--------|
| NAME | DATA 1 | DATA 2 |
|------|--------|--------|
|------|--------|--------|--------|--------|--------|
| NAME | DATA 1 | DATA 2 | DATA 3 | DATA 4 | DATA 5 |
|------|--------|--------|--------|--------|--------|
数据没有标准化,因为处理n
行时会受到伤害,因为所有行都是一次性读取的
这些是我提出的解决方案
存储上述数据的替代方法有哪些?NoSQL数据库可以处理这些数据吗?动态列意味着无模式是我们应该寻找的选项。MongoDB是首选。我们是否存储为JSON?如果是这样,Mongo将有助于操纵数据/提取/报告,使生活更轻松 如果您不熟悉NOSQL。MSSQL 2016以后的列中JSON存储支持为varchar(MAX)。SQLServer提供了处理JSON数据的函数。尽管默认情况下nvarchar是基于文本的索引。SQL支持基于计算列的索引,这将有助于处理JSON中的元素外观。允许任何数量的非聚集索引计算列,这将简化处理JSON数据的索引。
SQL2019对JSON有更多的支持,正如您所描述的,这听起来像是jsonb的工作。假设
name
在某个表中是唯一的,我可以想象这样的事情:
create table test (
tableId integer,
name text,
data jsonb,
constraint pk primary key(tableId, name)
);
insert into test values (1, 'movie1', '{"rating": 10, "name": "test"}');
insert into test values (1, 'movie2', '{"rating": 9, "name": "test2"}');
insert into test values (2, 'book1', '{"rank": 100, "name": "test", "price": 10}');
insert into test values (2, 'book2', '{"rank": 10, "name": "test", "price": 12}');
基本上,这个想法是使用tableId来标识每个子表,并将子表的行存储在这个one-db表中
这带来了一些可能性:
- 创建一个单独的表来存储关于每个子表的元数据。例如,子表的模式可以存储在这里,用于应用程序层验证
- 大型/热门子表上的部分索引:
create index test\u 1\u movie\u name on test((数据->'name')),其中tableid=1
(但您后来最多评论了12条,这一点都没有问题。)Postgres比SQL Server更好地支持JSON。Postgres获得本机json类型,而SQL Server将其作为VARCHAR,因此索引很糟糕。我认为任何其他nosql sb都可以满足这一需求。感谢您的输入。SQL Server-计算列索引将有助于删除文本索引。如果您不使用MongoDB,Couchbase是另一个NOSQL选项。创建后如何查询表?为什么不在需要时发布DDL来创建它们?@Deena“Postgres获得了本机json类型,而SQL Server将其作为VARCHAR来执行,因此索引很糟糕”任何特定示例?将JSON存储为VARCHAR没有什么错。平心而论。@LukaszSzozda没有索引,每次查询数据时,SQL Server都必须执行一次完整的表扫描,这就是varchar类型在JSON中的糟糕之处。当您说这些表可能会被过滤时,您是指对多个表还是其中一个表进行查询?你们有什么性能要求?序列扫描可以吗?我们谈论的表/行中的表/列的数量是多少,千/百万?查询将在每个表上完成,而不是针对多个表。列的数量可以是
n
其中n<12
大多数情况下,行可能是数千行,但不超过十万行。您的问题是关于无模式表的功能吗?我的意思是,您想在同一个表中存储具有不同列数的行,还是每个表都应该具有静态列数?