我正在研究需要一些基本數據關聯的應用程序。我選擇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