【问题标题】:How should I design my MYSQL table/s?我应该如何设计我的 MYSQL 表?
【发布时间】:2010-05-30 21:42:00
【问题描述】:

我为使用一个“项目”表的架构师构建了一个非常基本的 php/mysql 站点。 该网站展示了他从事的各种项目。

每个项目包含一段文字和一系列图像。

原始项目表(创建语法):

CREATE TABLE `projects` (
  `project_id` int(11) NOT NULL auto_increment,
  `project_name` text,
  `project_text` text,
  `image_filenames` text,
  `image_folder` text,
  `project_pdf` text,
  PRIMARY KEY  (`project_id`)
) ENGINE=MyISAM AUTO_INCREMENT=8 DEFAULT CHARSET=latin1;

客户端现在需要以下内容,我不确定如何处理数据库中的扩展。 我怀疑我需要一张额外的桌子。

现在每个项目都有“页面”。

页面包含...

  • 一张图片
  • 一段文字
  • 一张图片和一段文字。

每个页面都可以使用三种布局之一。

由于目前每个项目的文本不超过 4 条(这是一个非常冒险的假设),因此我扩展了原始表格以容纳所有内容。

新项目表尝试(创建语法):

CREATE TABLE `projects` (
  `project_id` int(11) NOT NULL AUTO_INCREMENT,
  `project_name` text,
  `project_pdf` text,
  `project_image_folder` text,
  `project_img_filenames` text,
  `pages_with_text` text,
  `pages_without_img` text,
  `pages_layout_type` text,
  `pages_title` text,
  `page_text_a` text,
  `page_text_b` text,
  `page_text_c` text,
  `page_text_d` text,
  PRIMARY KEY (`project_id`)
) ENGINE=MyISAM AUTO_INCREMENT=8 DEFAULT CHARSET=latin1;

在尝试了解有关 MYSQL 表结构的更多信息时,我刚刚阅读了 an intro to normalization 和 A Simple Guide to Five Normal Forms in Relational Database Theory。我要继续阅读! 提前致谢

【问题讨论】:

    标签: mysql database-design


    【解决方案1】:

    标准化是你的朋友。

    您会想要迁移到关系式两表设计。

    CREATE TABLE projects (
       project_id int not null primary key auto_increment,
       project_name varchar(128),
       -- ...
    );
    
    CREATE TABLE pages (
       page_id int not null primary key auto_increment,
       project_id int not null, 
       pagetext text,
       image varchar(128), 
       -- ...
    );
    

    现在每个项目可以有任意数量的页面。

    如果客户端然后回来说“每个页面可以有 0-N 个图像”,你会想要第三个表,其中包含一个外键 page_id(就像 pages 表有一个 project_id 外键)

    【讨论】:

    • 啊很好,所以它在 PHP 中,我将通过 project_id 链接表
    • @yaya3: 不,你也可以在 SQL 中加入表
    • @keenan:是的,也许我应该说“在表格设计之外,在我的代码中”而不是“PHP”?
    • 是的,通常情况下,您将让 PHP 执行将 project_id 上的两个表连接起来的查询
    猜你喜欢
    • 2011-04-07
    • 1970-01-01
    • 2014-10-22
    • 1970-01-01
    • 2012-07-25
    • 2010-09-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多