を参照してください含まれ、方法2が好ましいであろう。 @ JNevillメモ:1つの列に複数のデータを格納することは、データを検索またはフィルタリングするときに悪夢となります。
私は完全に推奨されるのはオプション3です。
表1:疾患
+------+-----------+
| id | name |
+------+-----------+
| 1 | HIV |
|------|-----------|
| 2 | FLU |
|------|-----------|
| 3 | Cancer |
+------+-----------+
主キー:
表2:以下のデザインを見てみましょう現象
+------+-----------+
| id | name |
+------+-----------+
| 1 | pain |
|------|-----------|
| 2 | cough |
|------|-----------|
| 3 | hair-loss |
+------+-----------+
主キー:
表3:疾患-現象
+-------------+--------------+
| disease_id | symptom_id |
+--------------+--------------+
| 1 | 1 |
|--------------|--------------|
| 1 | 2 |
|--------------|--------------|
| 1 | 3 |
+--------------+--------------+
主キー:
>
DISEASES_SYMTPOMS.disease_id
SYMTPOMS.id
- - >DISEASES_SYMTPOMS.symptom_id
あなたのベーステーブルDISEASES
とSYMPTOMS
を確立
DISEASES.id
:外部キーが
(disease_id, symptom_id)
。その後、最初の2つのテーブルのJOIN
を表す3 rdテーブルを確立します。このデータの正規化は、アプリケーションの構造に過ぎず、各疾患に複数の症状があり、各症状が複数の疾患に属する可能性があるため、データの重複を防ぎます。
サンプルクエリ(MySQLの):
SELECT
d.id,
d.name,
s.name
FROM DISEASES as d
INNER JOIN DISEASES_SYMPTOMS AS ds ON d.id = ds.disease_id
INNER JOIN SYMPTOMS AS s ON ds.symptom_id = s.id;
サンプルクエリ結果:
+------+----------------+----------------+
| id | disease_name | symptom_name |
+------+----------------+----------------+
| 1 | HIV | pain |
|------|----------------|----------------|
| 1 | HIV | cough |
|------|----------------|----------------|
| 1 | HIV | hair-loss |
+------+----------------+----------------+
方法2.これは、単一のフィールドのdoesnに複数の値を格納することは非常にまれです惨めさと後悔で終わります。 – JNevill
私はこの問題を解決するためにDISTINCTを使うことができますか? – conan
どの問題を解決するのが独特か?問題は適切な正規化であり、別途、将来の規模です。今から1年後に症状の属性を保存し始めたいのであれば、方法1と一緒に行くと想像してください。あなたは地獄からの参加で終わるでしょう。 – JNevill