2010-05-30 3 views
1

Я построил действительно базовый сайт php/mysql для архитектора, который использует одну таблицу «проектов». На веб-сайте представлены различные проекты, над которыми он работал.Как мне создать таблицу 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. Я буду продолжать читать! Заранее спасибо

ответ

3

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

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

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 внешний ключ)

+0

Ах, хорошо, поэтому его в PHP, где я буду связывать таблицы по project_id –

+0

@ yaya3: Нет, вы тоже можете присоединяться к таблицам в SQL –

+0

@keenan: возможно, я должен сказать «вне дизайна таблицы», мой код "вместо" PHP "? –

Смежные вопросы