2011-07-11 1 views
4

Я повторно задаю вопрос, который ранее был удален здесь, в SO за то, что он не был «вопросом программирования». Надеюсь, это немного более «программирование», чем последнее сообщение.Дизайн базы данных: относится к модели автомобиля или отделке?

Во-первых, несколько определений:

  • модели - 2011 Nissan Sentra
  • облицовку - 2011 Nissan Sentra LX

Как правило, конкретный автомобиль будет иметь список, скажем, доступных цвета или оборудование opti дополнения. Так 2011 Nissan Sentra могут быть доступны в следующих цветах:

  • Черный
  • Белый
  • Красный

Затем, производитель, возможно, сделал особый цвет доступен только 2011 Nissan Sentra LX отделкой:

  • Розовый с желтыми точками польки

Если бы я строил вебсайт автомобиль, в котором я хотел захватить эту информацию, которая в дальнейшем я должен делать:

  • Associate цвета модели?
  • Связать цвета с отделкой?
  • Связать цвета с моделью и обрезать?

У меня возникает ощущение, что связать его с моделью будет достаточно. Связывание с обрезкой означало бы дубликаты (например, 2011 Nissan Sentra LX и 2011 Nissan Sentre SE оба имели бы «черный» как цвет). Попытка сопоставить цвета модели и обрезки может быть излишней.

Предложения?

+0

Я бы сделал цвет поле свободной формы, которое предварительно заполнено в пользовательском интерфейсе с помощью общего выбора. Я думаю, именно так это делается на большинстве веб-сайтов. Основное преимущество заключается в том, что он значительно упрощает вашу схему БД и не позволяет вашим модельным/цветным исследователям сходить с ума. Но это также позволяет выполнять пользовательские задания на краску, которые вообще отсутствуют у изготовителя. – Flimzy

+0

Можете ли вы предложить модель? – StackOverflowNewbie

ответ

2

Если есть особые случаи, как вы говорите, где производитель сделал специальный цвет доступен только для определенной отделки, как «розовые с желтым горошком» для «2011 Nissan Sentra LX подрезать»

и вы хотите иметь те особый случай хранится, вы должны выбрать 2-й вариант.

Итак, ваши отношения будут:

1 производитель делает много моделей

1 модель имеет много триммеры

1 дифферент может иметь много цветов и 1 цвета много триммеров имеют это
(поэтому для этой связи вам понадобится таблица ассоциаций)

Manufacturer 
    1\ 
     \ 
     \N 
    Model 
     1\ 
     \ 
      \N 
     Trim   Colour 
      1\   1/ 
      \  /
       \N  /M 
       TrimColour 

С дополнительной информацией ция о цветах:

Один GeneralColour можно назвать как можно больше цветов различных производителей и один Производитель может «крестить» в GeneralColour с различным цветом (имена)

 Manufacturer   
     1/  1\   
     /  \   
     /N   \   
    Model   \  GeneralColour 
     1\    \  1/ 
     \    \ /
      \N   \N /M 
     Trim   Colour 
      1\   1/ 
      \  /
       \N  /M 
       TrimColour 

мышление более ясно, что дополнительные Manufacturer-Colour отношения не требуется:

Manufacturer 
    1\ 
     \ 
     \N    
    Model     GeneralColour 
     1\      1/ 
     \     /
      \N     /M 
     Trim   Colour 
      1\   1/ 
      \  /
       \N  /M 
       TrimColour 
+0

Но «черный» для 'Nissan Nissan Sentra LX' 2011 такой же, как и для« Nissan Sentra SE »2011 года. Хранение этого «черного» более одного раза - это дублирование данных, не так ли? – StackOverflowNewbie

+0

Да и нет. Да, «черный» одинаковый для обеих моделей. «Черный» - то же самое для «Toyota Corolla» и для «Ferrari Testarosa» («Черный Ferrari» был бы мерзостью, но позволяет пропустить этот момент). Нет, потому что это не дублирование данных. У вас будет множество моделей «Nissan» в ваших столах и многие «черные». –

+0

Когда я говорю «Черный», я не имею в виду общий цвет черный. Я имею в виду очень специфический вид черного для этого автомобиля (например, те, у кого такие фантастические имена, как «Midnight Black», и им присваивается код конкретного производителя). Было бы дублирование данных, верно? – StackOverflowNewbie

1

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

+0

Модель может иметь 0 или более планок. Эта часть уже смоделирована. – StackOverflowNewbie

+0

@StackOverflowNewbie: вы полностью исключили эти отношения из своего вопроса, и это делает БОЛЬШУЮ разницу в ответе. –

2

Если разные планки для одной и той же модели могут иметь разные цветовые параметры (как вы подразумеваете), то вы должны связать цвет с отделкой, иначе у вас будет некорректная/несовместимая информация. aka. Если «модель Nissan Sentra» 2011 года «розовая с желтыми точками польки», вы неправильно покажете ее как опцию для отделки, отличной от LX.

+0

Я думаю, что 99% времени, цвета связаны с моделью. Неужели так плохо отображать «Розовый с желтыми точками польки» на обложке Nissan Sentra LX', отличной от '2011, когда вы пытаетесь захватить этот цвет отделки? – StackOverflowNewbie

+0

@StackOverflowNewbie: Если вы не против иметь неточную модель, тогда идите и выберите первый вариант (сопоставьте цвета с моделью). Это не так уж важно, если у вас есть только сайт/база данных, отображающая информацию. Если, однако, клиент может заказать автомобили с вашего сайта/базы данных, тогда он может заказать то, что вы не можете предоставить. –

+0

ypercube - и если я не хочу, чтобы пользователь мог заказать что-то, что не может быть предоставлено (например, Nissan Sentra SE 2011, цвет желтого цвета с розовыми точками Polka), какой вариант выбрать? – StackOverflowNewbie

1

в соответствии с просьбой, в ответ на мой комментарий ...

Я бы просто сделал «цвет» текстовым полем свободной формы, возможно с выпадающим списком, в котором отображаются текущие популярные цвета в базе данных. Основное преимущество заключается в том, что он значительно упрощает вашу схему БД и не позволяет вашим модельным/цветным исследователям сходить с ума. Но это также позволяет выполнять пользовательские задания на краску, которые вообще отсутствуют у изготовителя.

manufacturers 
------------- 
id 

models 
------ 
id 
manufacturer (FK to manufacturers.id) 
model_name (VARCHAR) 

trims 
----- 
id 
model (FK to models.id) 

cars 
------- 
id 
trim (FK to trims.id) 
year INT 
color VARCHAR 
+0

Цвет должен быть отдельной таблицей и связан с любой моделью , отделкой или обоими. – StackOverflowNewbie

+0

@StackOverflowNewbie: Почему это должна быть отдельная таблица? Как академическое упражнение, я вижу желание иметь его как отдельную таблицу, но для реального приложения я считаю, что это усложняет ситуацию. Ваши пользователи будут вас ненавидеть. :) – Flimzy

+1

мои пользователи будут ненавидеть меня, если белые будут отличаться от белых. – Randy

1

Если бы я строил вебсайт автомобиля, в котором я хотел, чтобы захватить эту информации

, то вы должны были бы построить логическую модель, захваченную эту информацию. (Как это было трудно?) И это означает, что вы должны моделировать эти факты.

  • Некоторые модели относятся к модели.
  • Некоторые цвета относятся к комплекту отделки.
  • (И я буду держать пари, что я могу найти производителя, где некоторые цвета применяются к марку.)
  • (И Держу пари, что все эти цвета также имеют что-то делать с года.)

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

  • Вы можете игнорировать любое поведение в реальном мире, которое вы хотите.

Но, как Dr. Phil часто говорит,

  • "Когда вы выбираете поведение, вы выбираете последствия."

Упрощение известных требований - игнорирование того факта, что некоторые цвета применяются только к одному или двум пакетам отделки - означает, что вы создаете базу данных, чтобы преднамеренно разрешить недопустимые данные. Ваша база данных может содержать информацию о «Розовом с желтыми точками польки» Nissan Altima, или «Медь» 2002 Nissan Sentra. (Я думаю, что Nissan ввел медь в 2004 году)

Итак, вот реальный вопрос.

  • Сколько плохих данных вы можете терпеть?

Это всегда зависит от приложения. Сайт социальной сети, который собирал информацию о вашем цвете автомобиля, был бы намного более терпимым к невозможным выборам цвета, чем компания, которая продает краску для подкраски.

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