2010-06-03 3 views
2

Я не могу решить, что мне здесь делать ...Правильный способ настройки таблиц MySQL

У меня есть база данных с около 20 000 записей. Каждая из этих записей содержит около 20 столбцов.

Я хочу добавить около 20 или около того дополнительных столбцов в эту базу данных, которые будут на линии загрузки разных URL-адресов для каждой записи. В основном, они будут пустыми.

Что "правильный" способ сделать это:

  1. Добавить 20 дополнительных столбцов (youtubeurl, facebookurl и т.д.) (Преимущества: только один URL вызов // Недостатки: делает мою базу данных гораздо больше)

  2. Добавить дополнительную таблицу с тремя столбцами - «ID», «URLType», «URL», которую я могу дополнительно позвонить? (Преимущества: сохраняет основная таблица намного меньше // Недостатки: дополнительный SQL-запрос требуется)

Что я должен делать?

+0

Я знаю, что это зло, но я думаю, что у меня возникнет соблазн использовать битовую маску! Muhahahahaha – decompiled

+0

20000 записей не так много, поэтому я бы предложил вам просто добавить столбцы. Системы управления базами данных предназначены для управления такими вещами, для чего они созданы. –

+0

Я согласен с «Лексом» в какой-то мере. Основная проблема, которую я вижу, заключается в том, что «типы» URL-адресов никогда не являются конкретными и могут меняться в любое время. Это отсутствие гибкости может сделать модель [EAV] (http://en.wikipedia.org/wiki/Entity-attribute-value_model) лучшей опцией. – Matt

ответ

4

Все остальное равное, я бы выбрал вариант (2). Это позволяет сохранить нормализуемые данные и обеспечить гибкость, если вам нужно добавить больше сайтов в будущем.

FWIW, это не требует дополнительного запроса к данным SELECT, так как вы можете просто присоединиться к другой таблице. Но, конечно, для этого потребуются дополнительные запросы INSERT/UPDATE.

+0

Если вы используете ORM, даже обновление/вставка довольно просто. – Erik

+0

Конечно, я просто хотел уточнить, так как это было одной из проблем OP с этим подходом. –

+0

Отлично - большое спасибо. Эрик - что такое ОРМ? – jamescridland

2

Вариант 2 - это почти наверняка лучший вариант. Это облегчит вам добавление новых типов Url в будущем (просто придумайте новый URLType вместо создания нового столбца). Страницы, которые используют эти URL-адреса, тогда не нужно изменять, чтобы разместить новый тип URL-адреса; они просто выберут это из-за стола. Другими словами, вам нужно только внести изменения в одно место вместо нескольких.

Если у людей в основном есть только несколько из этих URL-адресов, разделение их на отдельный стол - это почти наверняка путь.

2

Все, что вы добавляете, это URL. Каждый URL-адрес связан с одним (или, возможно, большим числом) ваших текущих записей. Так как:

для URL-адресов, которые имеют только одну Запись- таблицу адресов с URL и FK для таблицы записей

или URLS, которые могут относиться к более чем одной Запись- таблицы адресов с url_id и URL связующей table with record_id и url_id

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