在关系数据库表中表示多维数组数据?

时间:2012-07-02 11:00:18

标签: database

假设我有类似对象的数据记录:

$article = array(
    'title' => '',
    'tagline' => '',
    'content' => '',
    'stats' => array(
        'words' => 0,
        'paragraphs' => 0,
        'tables' => 0
    ),
    'references' => array(
        'reference 1',
        'reference 2',
        'reference 3'
    ),
    'attachments' => array(
        'images' => array(
            'image 1',
            'image s'
        ),
        'videos' => array(
            'video 1',
            'video 2'
        )
    )
);

我的问题是如何在关系数据库中存储这个数据记录数组?我该如何设计表结构?

我知道我总是可以设置stats_words,stats_paragraphs等平面字段,但是还有更多的结构方法吗?而不是将JSON或序列化字符串存储在单个字段中....

谢谢!

1 个答案:

答案 0 :(得分:0)

例如这样:

article
  ID
  title _
  tagline _
  content ___
  stat_words
  stat_paragraphs
  stat_tables

article_reference
  ID
  article_id -> article
  reference _

article_attachment
  ID
  article_id -> article
  att_type // image or video
  path _
  title _

_表示varchar / text字段,其他字段是数字)

或者作为MySQL DDL:

CREATE TABLE IF NOT EXISTS article (
   id               INT NOT NULL AUTO_INCREMENT,
   title            VARCHAR(255) NOT NULL,
   tagline          VARCHAR(255) NOT NULL,
   content          MEDIUMTEXT NOT NULL,
   stat_words       INT NOT NULL,
   stat_paragraphs  INT NOT NULL,
   stat_tables      INT NOT NULL,
   PRIMARY KEY ( id )
) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=1;

CREATE TABLE IF NOT EXISTS article_reference (
   id               INT NOT NULL AUTO_INCREMENT,
   article_id       INT NOT NULL,
   reference        VARCHAR(255) NOT NULL,
   PRIMARY KEY ( id ),
   FOREIGN KEY ( article_id ) REFERENCES article( id )
) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=1;

CREATE TABLE IF NOT EXISTS article_attachment (
   id               INT NOT NULL AUTO_INCREMENT,
   article_id       INT NOT NULL,
   att_type         INT NOT NULL,
   path             VARCHAR(255) NOT NULL,
   title            VARCHAR(255) NOT NULL,
   PRIMARY KEY ( id ),
   FOREIGN KEY ( article_id ) REFERENCES article( id )
) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=1;