我正在研究需要一些基本数据关联的应用程序。我选择SQLite
作为我的数据库选择,以便于将来在移动版本的应用程序中使用它。它有一定的局限性,所以我可能完全错误。使用SQLite构建数据库
一个简单的场景是如下:
我需要与指定类别的汽车,使得汽车可以是多个类别的一部分。类别是预定义的。
我的方法:
- 三个表:
'Cars'
,'Categories'
,'CategoriesAssigned'
- 每个
'Car'
可以属于多个'Category'
。 'CategoriesAssigned'
用于映射'Categories'
到'Cars'
在SQLite
端创建三个表:
CREATE TABLE Cars(
Id INT PRIMARY KEY NOT NULL,
Name TEXT NOT NULL,
);
CREATE TABLE Categories(
Id INT PRIMARY KEY NOT NULL,
Name TEXT NOT NULL,
);
CREATE TABLE CategoriesAssigned(
Id INT PRIMARY KEY NOT NULL,
CategoryId INTEGER NOT NULL,
CarId INTEGER NOT NULL,
FOREIGN CategoryId(Id) REFERENCES Categories(Id),
FOREIGN CarId(Id) REFERENCES Cars(Id),
);
因此,我可以有许多'Category'
每个'Car'
。我不喜欢的是会有很多重复的数据,像'Category'
会重复许多车。
我对数据库仍然很陌生,想获得一些关于如何正确处理这种情况的建议和反馈。
更新:
有一种另一种方式,这是我个人讨厌:
CREATE TABLE Cars(
Id INT PRIMARY KEY NOT NULL,
Categories TEXT,
Name TEXT NOT NULL,
);
CREATE TABLE Categories(
Id INT PRIMARY KEY NOT NULL,
Name TEXT NOT NULL,
);
,然后添加'Categories'
昏迷分离:即“汽车,豪华,柴油”,最后解析串。但不知怎的,这感觉更加错误。
从可维护性和性能的角度来看,哪种方式更受欢迎? – eYe
我的首选是将数据中的任何数据以粒度的方式存储在数据库中,这意味着有连接表。但是,这取决于你打算如何使用这个领域。如果您想通过某个类别搜索和分析数据,则将其作为数据库字段有助于运行Group By查询。另一方面,如果它是不太重要的领域,它可能不保证SQL连接的麻烦。考虑帖子上的标签 - 我们可以关联无数个标签,但我可能不需要其他数据库表。也许我只是查询包含SQLlite的所有标签。 – OptimisticToaster