我撰寫了決議文本檔案并使用哈希計算每個檔案/記錄中出現美國州縮寫的次數的 Perl 代碼。我最終得到這樣的東西。
File: 521
OH => 4
PA => 1
IN => 2
TX => 3
IL => 7
我正在努力尋找一種將此類哈希結果存盤在 SQL 資料庫中的方法。我正在使用mariadb. 因為資料本身的結構不同,一個檔案會有一些狀態,而下一個檔案可能有其他狀態。例如,一個檔案可能只包含幾個狀態,下一個檔案可能包含一組完全不同的狀態。我什至無法概念化表結構。將這樣的資料存盤在資料庫中的最佳方法是什么?
uj5u.com熱心網友回復:
有許多可能的方法來存盤資料。
為簡單起見,請查看以下方法是否適合您的案例。該解決方案基于使用一個具有兩個基于id和state列的索引的表。
CREATE TABLE IF NOT EXISTS `state_count` (
`id` INT NOT NULL,
`state` VARCHAR(2) NOT NULL,
`count` INT NOT NULL,
INDEX `id` (`id`),
INDEX `state` (`state`)
);
INSERT INTO `state_count`
(`id`,`state`,`count`)
VALUES
('251','OH',4),
('251','PA',1),
('251','IN',2),
('251','TX',3),
('251','IL',7);
示例 SQL SELECT 輸出
MySQL [dbs0897329] > SELECT * FROM state_count;
----- ------- -------
| id | state | count |
----- ------- -------
| 251 | OH | 4 |
| 251 | PA | 1 |
| 251 | IN | 2 |
| 251 | TX | 3 |
| 251 | IL | 7 |
----- ------- -------
5 rows in set (0.000 sec)
MySQL [dbs0897329]> SELECT * FROM state_count WHERE state='OH';
----- ------- -------
| id | state | count |
----- ------- -------
| 251 | OH | 4 |
----- ------- -------
1 row in set (0.000 sec)
MySQL [dbs0897329]> SELECT * FROM state_count WHERE state IN ('OH','TX');
----- ------- -------
| id | state | count |
----- ------- -------
| 251 | OH | 4 |
| 251 | TX | 3 |
----- ------- -------
2 rows in set (0.001 sec)
uj5u.com熱心網友回復:
您的問題的方向有點不清楚。但是如果你想要一個好的關系模型來存盤資料,那就是三個表。一個用于檔案。一份給各州。一個用于計數檔案中的狀態。例如:
表格:
CREATE TABLE file
(id integer
AUTO_INCREMENT,
path varchar(256)
NOT NULL,
PRIMARY KEY (id),
UNIQUE (path));
CREATE TABLE state
(id integer
AUTO_INCREMENT,
abbreviation varchar(2)
NOT NULL,
PRIMARY KEY (id),
UNIQUE (abbreviation));
CREATE TABLE occurrences
(file integer,
state integer,
count integer
NOT NULL,
PRIMARY KEY (file,
state),
FOREIGN KEY (file)
REFERENCES file
(id),
FOREIGN KEY (state)
REFERENCES state
(id),
CHECK (count >= 0));
資料:
INSERT INTO files
(path)
VALUES ('521');
INSERT INTO states
(abbreviation)
VALUES ('OH'),
('PA'),
('IN'),
('TX'),
('IL');
INSERT INTO occurrences
(file,
state,
count)
VALUES (1,
1,
4),
(1,
2,
1),
(1,
3,
2),
(1,
4,
3),
(1,
4,
7);
這些狀態當然會被重用。用所有 50 個填滿表格并使用它們。不應再次為每個檔案插入它們。
如果您想區分“我知道它是 0”,則可以在未出現相應狀態的檔案中顯occurrences式填充。和“我不知道計數。”,然后將通過缺少相應的行對其進行編碼。如果您不想區分這一點并且沒有行意味著計數,您可以在查詢中通過使用外連接來處理它并“翻譯”為.count00coalesce()0
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/414582.html
標籤:
