SQLite为每个点创建一个表或存储为字符串

SQLite为每个点创建一个表或存储为字符串,sqlite,sqlalchemy,normalization,Sqlite,Sqlalchemy,Normalization,我需要在数据库中存储3D点(使用SQLAlchemy的SQLite)。每个3D点集将包含约1000个点,我有多达数百个点集。我一直在使用JSON将每个点X、Y、Z坐标转换为一个大字符串,然后将这3个字符串存储在一个表中 from db.base import Base from sqlalchemy import Column, Integer, String class PointData(Base): ''' Raw point data, cannot store array i

我需要在数据库中存储3D点(使用SQLAlchemy的SQLite)。每个3D点集将包含约1000个点,我有多达数百个点集。我一直在使用JSON将每个点X、Y、Z坐标转换为一个大字符串,然后将这3个字符串存储在一个表中

from db.base import Base
from sqlalchemy import Column, Integer, String

class PointData(Base):
    ''' Raw point data, cannot store array in sqlite '''
    #JSON strings 
    x_data = Column(String(), nullable=True)
    y_data = Column(String(), nullable=True)
    z_data = Column(String(), nullable=True)

另一个选项是为点集中的每个点创建一个表-最终我会得到约1000个表。对于数据库的总体大小和性能,哪种方法更好?大型单表还是更多的小型表?

您提出的两种解决方案都没有规范化

创建两个表:

CREATE TABLE PointSet (
    id INTEGER PRIMARY KEY
)

CREATE TABLE Point (
    id INTEGER PRIMARY KEY,
    pointSetId INTEGER REFERENCES PointSet(id),
    x NUMERIC,
    y NUMERIC,
    z NUMERIC
)

对于每个点,在
point
表中插入一行,将
pointSetId
设置为其所属集合的ID。通过过滤掉
pointSetId
不匹配的行来查询Points表。

我会说:一个表加上
point\u set\u id
列上的适当索引。一个表更易于维护(想象一下,您想在处创建一个字段
,或在
处修改一个字段,添加到上千个表中)。如果你使用指数,那么这个规模的表现不应该是个问题。