Как мне спроектировать мои таблицы / таблицы MYSQL? - PullRequest
1 голос
/ 31 мая 2010

Я создал действительно простой сайт php / mysql для архитектора, который использует одну таблицу 'projects'. На сайте представлены различные проекты, над которыми он работал.

Каждый проект содержал один фрагмент текста и одну серию изображений.

Таблица исходных проектов (создать синтаксис):

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, я только что прочитал введение в нормализацию и Простое руководство по пяти нормальным формам в теории реляционных баз данных . Я буду продолжать читать! Заранее спасибо

1 Ответ

3 голосов
/ 31 мая 2010

Нормализация - твой друг.

Вы захотите перейти к реляционному дизайну с двумя таблицами.

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 (точно так же, как таблица страниц имеет project_id внешний ключ)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...