我想允許註冊到我的數據庫的用戶擁有自己的表,用於各種由他們的ID唯一擁有的集合。sqlite - 如何讓註冊用戶擁有集合?
的用戶存儲在:(users :: id -> [id, email])
create table users (
id integer primary key autoincrement not null unique,
email varchar[255] not null
);
,他們有一個配置表:
create table profiles (
id integer unique primary key not null,
foreign key(id) references users(id)
);
我希望能夠添加各種收藏品的用戶配置文件可以參考,如朋友列表,最喜歡的音樂名稱以及之前使用的密碼哈希列表。
我最初的想法是爲這些集合中的每一個創建一個唯一表,並將配置文件中的表名字段與表的實際名稱關聯起來,但是這個想法看起來非常愚蠢,因爲它使用許多無意義的命名錶。
我也有一個擔心,即使我可以爲每個集合創建一個表,但我不知道如何引用由SQL中另一個表中的字段命名的表,所以我需要執行兩個查詢並處理第一個傳遞給第二個。
- 從配置文件表中獲取集合標識。
- 訪問表命名查詢1.
的結果是錯誤的感覺也是如此。
是否有另一種將主鍵映射到事物集合而不是創建表的方法?如果不是,我是否應該使用不同的數據庫,如「friend_lists.db」來存儲所有這些表?
提前致謝。
讓我看看我是否正確理解你。您是否建議將朋友列表存儲在一張表中,並根據您要搜索的朋友進行篩選?例如Bob的朋友和Amy的朋友在同一張桌子上,但是當你在尋找Bob的朋友時,你可以用Bob的ID搜索行。 – Dmitry
它只是覺得將這些數據移動到json文件映射標識符到所有朋友標識符會更具有計算效率,因爲我不確定數據庫是否以某種方式跳過「遍佈數百萬行來找到這個人的100個朋友」並將其優化爲一些更明智的事情,而因爲關係只是數字 - >很多數字,所以把所有的朋友放在一張桌子裏感覺是錯誤的。 – Dmitry
@Dmitry就是這樣。 'SELECT friend_id FROM friends WHERE user_id = bobs_id'。您也可以使用連接:'SELECT users.name FROM friends INNER JOIN users ON users.id = friends.friend_id WHERE friends.user_id = bobs_id'(如果您使用的是JSON,則不能這樣做)。如果您在經常查詢的列上設置了索引,則搜索速度會很快。 –