Дизайн базы данных: относитесь к модели или комплектации автомобиля? - PullRequest
4 голосов
/ 12 июля 2011

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

Сначала несколько определений:

  • модель - 2011 Nissan Sentra
  • отделка - 2011 Nissan Sentra LX

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

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

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

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

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

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

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

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

Ответы [ 5 ]

2 голосов
/ 12 июля 2011

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

2 голосов
/ 12 июля 2011

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

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

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

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
1 голос
/ 12 июля 2011

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

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

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

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

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

Но, как Д-р.Фил часто говорит:

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

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

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

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

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

1 голос
/ 12 июля 2011

По запросу в ответ на мой комментарий ...

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

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
1 голос
/ 12 июля 2011

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

...