这种内容的MySQL结构?

时间:2012-09-04 20:31:30

标签: mysql structure

我有几百个文本文件,其数据类似于:

Capo: 77/100
Define: 0/70
Largo: 85/85
Facto: 16/75

数据库是否适合这个?如果是,我想不出正确构建表格的方法。

有人可能会考虑为CapoDefineLargoFacto制作列,但是在这几百个文本文件中,大约有 200个不同的列单词,如果要完成,每个都需要一个列。

3 个答案:

答案 0 :(得分:2)

如果没有更好的解释,很难确切地知道这些数据是什么意思。但是将所有这些东西都放在DBMS表中并不难。创建显示

的列
  1. 分母
  2. 分母
  3. 文件名(用于文件所来自的文本文件)。
  4. 然后你可以用这样的查询处理和聚合单词。

    SELECT word,
           SUM(numerator)   AS numerator,
           SUM(denominator) AS denominator
      FROM words
     GROUP BY word
    

    小提琴:http://sqlfiddle.com/#!2/d0e4d/1/0

答案 1 :(得分:1)

鉴于您的上述格式,我将在下面创建结构。主键是单词,意味着它只能出现一次。我假设这两个值不超过100,因此tinyint列就足够了。

CREATE TABLE words (
  word varchar(15) NOT NULL PRIMARY KEY,
  val1 tinyint UNSIGNED DEFAULT 0,
  val2 tinyint UNSIGNED DEFAULT 0)

如果您多次出现该单词,您可以考虑添加代理键作为主键,例如:

CREATE TABLE words (
  id int AUTO_INCREMENT PRIMARY KEY
  word varchar(15) NOT NULL,
  val1 tinyint UNSIGNED DEFAULT 0,
  val2 tinyint UNSIGNED DEFAULT 0)

答案 2 :(得分:1)

您可以将它们存储在一种键/值结构中,如下所示;

Values:
Key    v1  v2
-------------
Capo    0 166
Largo  77  77
Facto  10  20

如果它们彼此相关,您可以为这些值提供父ID以对它们进行分组:

Values:
Parent Key    v1  v2
---------------------
0      Capo    0 166
0      Largo  77  77
0      Facto  10  20
1      Capo    5  88

如果单词是固定的,您可以将它们标准化为不同的表:

Words:
WordID  Word
------------
1       Capo
2       Largo
3       Facto
4       Define

Values:
Parent WordId v1  v2
---------------------
0      1       0 166
0      2      77  77
0      3      10  20
1      1       5  88

作为替代方案,您可能希望看起来像MongoDB这样的存储空间。它允许您存储每个具有不同属性的“文档”。