要做到这一点相对简单但没有那么多安全性,请在表中添加一列来保存(或表示)帐户。当您访问数据时包含一个条件(WHERE 子句)来仅选择帐户的行。
考虑以下几点:-
DROP TABLE IF EXISTS fb_account_data_simple;
CREATE TABLE IF NOT EXISTS fb_account_data_simple (_id INTEGER PRIMARY KEY, fb_data TEXT, fb_account TEXT);
INSERT INTO fb_account_data_simple (fb_data, fb_account) VALUES
('Face Book Data 001','FRED'),
('Face Book Data 002','FRED'),
('Face Book Data 001','MARY'),
('Face Book Data 003','MARY'),
('Face Book Data 004','MARY'),
('Face Book Date 003','FRED');
;
SELECT * FROM fb_account_data_simple WHERE fb_account = 'MARY';
这个;
- 创建一个名为 fb_account_data_simple 的表,其中有两列 1 用于数据,1 用于 Facebook 帐户名称。
- 然后为每个帐户加载 6 行数据 3 行。
- 最后,它只提取名为 MARY 的帐户的行,结果是:-
但上述内容并未标准化,因为同一个帐户名会被多次存储。
规范化版本将有一个帐户表和一个引用帐户的主表中的列。
例如考虑以下内容:-
DROP TABLE IF EXISTS fb_account;
CREATE TABLE IF NOT EXISTS fb_account (_id INTEGER PRIMARY KEY, account TEXT);
INSERT INTO fb_account (account) VALUES
('FRED'), -- will very likely have an _id value of 1 automatically generated by SQLite
('MARY') -- will very likely have an _id value of 2 automatically assigned by SQLite
;
DROP TABLE IF EXISTS fb_data;
CREATE TABLE IF NOT EXISTS fb_data (_id INTEGER PRIMARY KEY, fb_data TEXT, account_reference INTEGER);
INSERT INTO fb_data (fb_data, account_reference) VALUES
('Face Book Data 001',1),
('Face Book Data 002',1),
('Face Book Data 001',2),
('Face Book Data 003',2),
('Face Book Data 004',2),
('Face Book Date 003',1);
;
SELECT fb_data, account
FROM fb_data
JOIN fb_account ON account_reference = fb_ACCOUNT._id
WHERE account = 'MARY'
这个;
- 为 Facebook 帐户创建表格
- 然后它会加载这两个帐户。
- 然后它为数据创建表
- 然后它为两个帐户加载一些数据(使用帐户行的唯一 ID)
- 然后它从数据表中提取数据并通过 JOIN 从帐户中获取相应的数据
最终结果是一样的(就对最终用户有用的数据而言):-
虽然对于相同的结果,这似乎工作更多,但它被认为是更好的方法,因为它更有效(数字键/索引通常遍历更快,使用更少的存储,因此减少了 i/o 开销)
如果您希望数据安全,那么这是一个更复杂但非常可行的问题。