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

SQLite create a table for each point or store as string

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

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)

另一种选择是为点集中的每个点创建一个 table - 我最终会得到 ~1000 tables。对于数据库整体大小和性能,哪种方法更好 - 大单个 tables 或更多小 tables?

您提出的两个解决方案均未标准化。

创建两个 table:

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 table 中插入一行,并将 pointSetId 设置为其所属集合的 ID。通过过滤掉 pointSetId 不匹配的行来查询点 table。