SQLite为每个点创建一个表或存储为字符串
我需要在数据库中存储3D点(使用SQLAlchemy的SQLite)。每个3D点集将包含约1000个点,我有多达数百个点集。我一直在使用JSON将每个点X、Y、Z坐标转换为一个大字符串,然后将这3个字符串存储在一个表中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
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
列上的适当索引。一个表更易于维护(想象一下,您想在处创建一个字段,或在
处修改一个字段,添加到上千个表中)。如果你使用指数,那么这个规模的表现不应该是个问题。