2013-09-18 3 views
1

Я разрабатываю приложение, где я хочу искать болезни на основе симптомов. Я пытаюсь создать базу данных с помощью MySql, но, будучи новичком, у меня возникают проблемы с философией дизайна.Ячейка базы данных с несколькими значениями?

В основном это заболевание будет иметь несколько симптомов, поэтому на disease столе, я хотел, чтобы эти столбцы:

disease_id, disease_name, disease_description, **disease_symptoms** 

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

Так что лучшее решение, которое я нашел до сих пор было сделать таблицу с несколькими столбцами, 1 для идентификатора болезни, а затем, как 10 столбцов называется: symptom_0, symptom_1, symptom_2, ЭСТ. Поэтому, когда я делаю SQL-запрос, он может вернуть все болезни, которые имеют определенный симптом.

Мне просто интересно, есть ли более эффективный способ сделать это.

ответ

7

Если у вас есть отношение M-to-N между болезнями и симптомами (или любыми другими лицами на самом деле), вам нужно 3 таблицы: сначала для болезней, таких как (disease_id, ...), вторая для симптомов (симптоматика, ...) и третий, связывающий таблицу (disease_id, symptom_id).

Затем выполнение SQL, как: SELECT * FROM diseases WHERE disease_id IN (SELECT disease_id FROM diseases_vs_symptoms WHERE symptom_id = MY_SYMPTOM);

UPDATE Я только гугл немного и нашел этот многообещающе смотрит SO вопрос, который вы можете найти полезным: Relational Database Design Patterns?

1

Я не думаю, это хорошая идея создать несколько столбцов, так как есть много возможных симптомов. Путь я хотел бы сделать это: Создать таблицу symptoms с id и name Создать таблицу disease_symptoms с disease_id и symptom_id

Теперь в таблице disease_symptoms вы связаны болезни и симптомы, и могут легко найти, какие заболевания имеют некоторые симптомы и наоборот.

1

Я бы создал еще две таблицы. Один только для симптомов с двумя полями: symptom_id и symptom_name. Во-вторых, соединяя ваши болезни с симптомами, два поля: disease_id и symptom_id. Вторая таблица будет содержать столько записей, сколько симптомов для этой болезни.

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