Разработка схемы базы данных - как хранить конкретные настройки приложения для сущностей - PullRequest
4 голосов
/ 30 июня 2011

Я пытаюсь создать несколько таблиц базы данных для хранения параметров конфигурации определенных объектов и приложений, с которыми они связаны. Я могу так далеко, но ударил "кирпичную стену". Я покажу вам, что я имею в виду ... (не воспринимайте следующее: картинки, как буквальную деловую проблему, картинки - просто простой способ объяснить вам мою проблему).

Критерии

  1. У нас есть каталог фотографий.
  2. У нас есть несколько приложений, которые могут потреблять любое количество из них фотографий.
  3. Мы хотим настроить способ отображения этих картинок. в зависимости от приложения.

Имейте в виду, что у каждого приложения есть особый и уникальный способ, которым его можно настроить для показа изображений.

Итак, ясно, что нам нужны 2 таблицы PICTURE и APPLICATION и таблица соединений для отображения взаимосвязи M-M, так как много изображений может быть во многих приложениях - см. Ниже:

enter image description here

Я выделил красным столбец «CONFIG_TABLE» - у меня очень сильное подозрение, что это плохо, очень, очень плохо. Это показывает, что для определенного приложения это таблица конфигурации для хранения настроек. См. Ниже:

enter image description here

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

1 Ответ

5 голосов
/ 30 июня 2011

Дизайн не за горами от правильности.Вам просто не нужен столбец application.config_table.Вместо этого каждое приложение должно знать, какая таблица относится к его собственному использованию изображений.

Так, например, в приложении PicManager вы можете сделать это:

SELECT p.*, c.*
FROM Picture_Appliation AS pa
INNER JOIN Picture AS p ON pa.pic_id = p.pic_id
LEFT OUTER JOIN Picman_Config AS c ON p.pic_id = c.pic_id
WHERE pa.app_id = 100;

И в каждом издругие приложения, вы бы закодировали другую конфигурационную таблицу в своем запросе.

Не пытайтесь сделать это слишком «автоматическим» или «управляемым данными».Просто напишите код, который подходит для каждого приложения.Вы можете использовать управляемые данными методы для значений данных (например, app_id = 100), но не код.Данные есть данные.Код - это код.

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

...