@stayHARD

Как лучше спроектировать базу данных?

Добрый вечер.
Хочу правильно построить базу данных.
Ниже мои представления об этом. Хочу услышать мнение и предложения по улучшению(они явно будут ;))
Небольшая админка в которой админ может добавлять курсы для пациентов:
Например он может:
Course: (Создать курс)
- Days: "30" (который состоит из 30ти дней)
- start_date: 2015-08-17 (начинается 17 августа 2015 года)
- user: Выбор из (user1, user2, user3 ....)  (и присвоить его юзеру)
(Дальше он выбирает какие лекарства будет принимать пациент в этом курсе)
(Лекарст в курсе может быть неограниченное количество)
- med1: Выбор из (Аспирин, парацетамол .....)  (Выборка будет подгружаться из специальной таблицы из БД с лекарствами, здесь можно выбрать только 1 препарат)
- med1_time: Мультивыбор из (Утро / Обед / Вечер) (Здесь просто обычная выборка, когда принимать лекарство, здесь можно выбрать несколько вариантов)
Утро - 08:00:00
Обед - 12:00:00
Вечер - 18:00:00
- med1_amount: "1" ( Кол-во которе необходимо принять)
- med1_type: Выбор из (Таблетка / Грамм / Миллилитр / Капсула) (Здесь просто обычная выборка, в чем принимать лекарство, здесь можно выбрать только 1 тип)
- med1_description: "какой-то текст" (небольшое описание для лекарства, например как принимать или показания какие-то)
- med1_video: "какая-то ссылка" (ссылка на видео)
- med1_week: Мультивыбор из (Понедельник / вторник / среда / четверг / пятница / суббота / воскресенье) (Выборка, в какие дни нужно пить это лекарство. Возможно стот сделать календарик, где админ сможет выбирать даты когда пить. И в итоге получить массив дат, но как его хранить?)


Теперь тоже самое только для 2 препарата. Повторяю препаратов может быть много.
- med2: Выбор из (Аспирин, парацетамол .....)
- med2_time: Мультивыбор из (Утро / Обед / Вечер)
Утро - 08:00:00
Обед - 12:00:00
Вечер - 18:00:00
- med2_amount: "2"
- med2_type: Выбор из (Таблетка / Грамм / Миллилитр / Капсула)
- med2_description: "какой-то текст2"
- med2_video: "какая-то ссылка2"
- med2_week: Мультивыбор из (Понедельник / вторник / среда / четверг / пятница / суббота / воскресенье)

В итоге получим:
ID, date, med, med_time, med_amount, med_type, med_description, med_video, med_week, user_id
1, 2015-08-17, Аспирин, 08:00:00, 12:00:00,	1, Таблетка, какой-то текст, какая-то ссылка, Вторник, Среда, Пятница, 1
.....
30, 2015-09-16, Аспирин, 08:00:00, 12:00:00,	1, Таблетка, какой-то текст, какая-то ссылка, Вторник, Среда, Пятница, 1
31, 2015-08-17, Парацет, 08:00:00, 12:00:00,	2, Таблетка, какой-то текст2, какая-то ссылка2, Среда, Суббота, 1
.....
60, 2015-09-16, Парацет, 08:00:00, 12:00:00,	2, Таблетка, какой-то текст2, какая-то ссылка2, Среда, Суббота, 1
  • Вопрос задан
  • 445 просмотров
Пригласить эксперта
Ответы на вопрос 2
svfat
@svfat
☺Нужен VPS? Два месяца бесплатно. Смотри профиль☺
Основная проблема вашего варианта, то, что количество лекарств в курсе ограничено - а что, если их понадобится 100 или 1000? В таблице будет столько же столбцов? Это решается тремя таблицами. Вот псевдокод:
# Это курс - он связан с моделью юзера
class Course(models.Model):
    days = models.IntegerField()
    start_date = models.DateField()
    user =  models.ForeignKey(User)

# Это лекарство - оно само по себе
class Med(models.Model):
    med = models.ChoiceField()
    time = models.ChoiceField()
    med_amount = models.CharField()
    med_type = models.ChoiceField()
    descr = models.TextField()
    video = modesl.URLField()
    week = models.ChoiceField()

# Это связывает курс с лекарством (и позволяет присваивать их неограниченное число раз)
class CourseMed(models.Model):
    course = models.ForeignKey(Course)
    med = models.ForeignKey(Med)


Используя встроенную админку такое приложение можно написать минут за 15
Ответ написан
Комментировать
@vilgeforce
Раздолбай и программист
Лучше прочитать про третью нормальную форму и не задаваться больше такими вопросами.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы