2016-01-23 5 views
0

Я пытаюсь настроить таблицы базы данных для сайта на рынке, и у меня возникли трудности с настройкой таблиц.Как настроить таблицы базы данных, дизайн базы данных

У меня около 18 категорий, в каждой категории много детских категорий. Поэтому я сделал таблицу под названием category, в которой перечислены 18 категорий со следующими колонками: id, category_name, position, visible.

И я сделал таблицу для каждой категории, потому что каждая категория имеет разные атрибуты. Например, real estate имеет разные атрибуты, чем automobiles. Итак, я закончил с 18 таблицами: одна таблица для каждой категории.

  1. Первый вопрос: Я делаю это правильно, создавая таблицу для каждой категории?
  2. Второй вопрос: каждая строка из таблицы каждой категории представляет собой объявление для элемента. Я смущен тем, как настраивать таблицы для изображений. В каждом объявлении есть набор изображений.

    Вопрос: Должен ли я создать таблицу images для каждой родительской категории или она может быть одной images таблицы для всех категорий?

+1

отредактируйте его правильно, чтобы мы могли понять –

+0

@PathikVejani на StackOverflow, каждый может редактировать вопросы, чтобы добавить больше пробелов ... –

+0

Извините, я новичок в StackOverflow, попытаюсь отредактировать его! – Samwise

ответ

0

У меня возникло ощущение, что вам нужно прочитать о том, как создавать отношения между таблицами и в частности концепции внешнего ключа.

Вот мое исполнение схемы, которую вы описали:

# Our main table 
CREATE TABLE `categories` (
    `id` int(11) unsigned NOT NULL AUTO_INCREMENT, 

    # Regular foreign key 
    `image_id` int(11) unsigned NOT NULL, 

    # Polymorphic foregin key 
    `category_table` enum('automobiles','real_estate') NOT NULL, 
    `category_id` int(11) unsigned NOT NULL, 

    # Common category data 
    `name` text NOT NULL, 
    `position` smallint(5) NOT NULL, 
    `visible` enum('yes','no') NOT NULL, 
    PRIMARY KEY (`id`), 

    # Foreign key constraints 
    UNIQUE KEY `category_table` (`category_table`,`category_id`), 
    KEY `image_id` (`image_id`) 
); 


# A child table that stores automobile specific data 
# - `categories` table refers to its records via `category_id` part of the foreign key, when `category_table` equals 'automobiles' 
CREATE TABLE `categories_automobiles` (
    `id` int(11) unsigned NOT NULL AUTO_INCREMENT, 
    `make` varchar(255) NOT NULL, 
    `model` varchar(255) NOT NULL, 
    PRIMARY KEY (`id`) 
); 

# A child table that store automobile specific data 
# - `categories` table refers to its records via `category_id` part of the foreign key, when `category_table` equals 'real_estate' 
CREATE TABLE `categories_real_estate` (
    `id` int(11) unsigned NOT NULL AUTO_INCREMENT, 
    `squarespace` decimal(10,2) NOT NULL, 
    PRIMARY KEY (`id`) 
); 

# A table that stores images 
# - `categories` table refers to its records via `image_id` foreign key 
# - other tables may refer to its record as well 
CREATE TABLE `images` (
    `id` int(11) unsigned NOT NULL AUTO_INCREMENT, 

    # Either store image data itself in this table 
    `image_data` blob NOT NULL, 
    # or store file path to the image 
    `image_path` text NOT NULL, 

    PRIMARY KEY (`id`) 
); 

Я надеюсь, что это помогает.

+0

Большое спасибо @chromice! я просто не понимаю, почему вы помещаете внешние ключи в _parent table_, я думал, что таблица родителя _primary key_ должна быть внешним ключом в дочерней таблице, также я думал, что мы всегда должны устанавливать ** ограничения ** в дочерней таблице. – Samwise

+0

Вы можете поместить 'category_id' в таблицы' images', но тогда вы не сможете использовать, скажем, таблицу тегов, таблицу 'images', так как каждая запись в таблице« images »будет указывать на одну и только запись в таблице категорий; и вы не сможете иметь несколько записей категории, указывающих на одну и ту же запись в таблице «images». Что касается полиморфных отношений, просто нет другого способа определить отношения «один к одному». Если дочерние таблицы имели «category_id», указывающие на основную таблицу, вы можете создать добавление ограничения UNIQUE, то есть каждая запись в «категориях» имеет только одну запись в * любой * дочерней таблице. – chromice

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