структура базы данных MySQL - PullRequest
       4

структура базы данных MySQL

1 голос
/ 21 августа 2011

Я застрял в сложной ситуации с дизайном БД mySQL для моего веб-сервиса. БД изначально имела такую ​​структуру:

   CREATE TABLE IF NOT EXISTS `Disease` (
   `Name` varchar(20) NOT NULL,
   `Age` int(10) unsigned NOT NULL,
   `Descriptin` text NOT NULL,
   `Sex` varchar(10) NOT NULL,
   `Ethnicity` varchar(20) NOT NULL,
    PRIMARY KEY (`Name`,`Sex`,`Ethnicity`),
    KEY `Sex` (`Sex`),
    KEY `Ethnicity` (`Ethnicity`)
     ) 

  ALTER TABLE `Disease`
   ADD CONSTRAINT `Disease_ibfk_1` FOREIGN KEY (`Sex`) REFERENCES `Sex` (`Sex`)     ON DELETE CASCADE ON UPDATE CASCADE,
  ADD CONSTRAINT `Disease_ibfk_2` FOREIGN KEY (`Ethnicity`) REFERENCES `Ethnicity` (`Ethnicity`)     ON DELETE CASCADE ON UPDATE CASCADE;

Таким образом, в основном Болезнь ( Имя , Возраст, Описание, Пол , Этнос ) Где Секс и Этнос являются внешними ключами к двум таблицам под названием Секс и Этнос они могут иметь более одного значения.

Теперь к вопросу мне нужно добавить еще один столбец под названием «Симптомы», который будет многозначным, но я не могу объявить его как внешний ключ, мне нужно вот что:

пример строки

Disease(Name="DiseaseName",Age="40",Description="is caused by...",Sex="male",Ethnicity="Caucasian",Symptoms"Headache,sorethroat,fever") 

Так что в основном мне нужно, чтобы Симптомы содержали String of Array, но, очевидно, я не могу это сделать, так как это СУРБД

Спасибо всем за ваше время и усилия!

Ответы [ 4 ]

3 голосов
/ 21 августа 2011

Не делай этого. Вместо этого нормализуйте модель данных: создайте новую таблицу «Симптомы», ограниченную внешним ключом «Болезнь», и сделайте одну запись для каждого симптома.

Всякий раз, когда вы начинаете думать о размещении наборов данных в одном поле, вы фактически пытаетесь создать свою собственную мини-базу данных внутри базы данных. Мысль о том, что вы можете превзойти и превзойти вашу СУБД, в лучшем случае оптимистична и, скорее всего, в дальнейшем приведет к тому, что код станет не поддерживаемым.

Кстати, действительно ли Sex нужно искать в отдельной таблице? Для таких микрокатегорий вы могли бы рассмотреть некоторый тип перечисления.

0 голосов
/ 21 августа 2011

Вам необходимо отношение m: n:

  • Таблица: Болезнь
    • Имя
    • Пол
    • Этничность
  • Таблица: симптомы
    • ID
    • Имя
  • Таблица: Disease_has_Symptoms
    • Имя (от FK до болезни)
    • Секс (от FK до болезни)
    • Этническая принадлежность (от FK до болезни)
    • ID (от FK до симптомов)

(возможно, проще добавить ID-столбец в Disease и ссылаться на него внутри Disease_has_Symptoms)

0 голосов
/ 21 августа 2011

Если вы не заметили, что ошиблись Описание в запросе на создание таблицы.

0 голосов
/ 21 августа 2011

Вы можете выполнить «массив строк», который вы ищете, нормализуя ваши данные.Добавьте новый ключевой столбец в таблицу «Болезни».Затем создайте дочернюю таблицу под названием «Симптом».Вставьте запись для каждой строки с внешним ключом обратно в родительскую запись таблицы «Болезнь».

...