在兩種方法中,方法2是優選的。由於@JNevill筆記,當在一列中存儲多個數據片段時,在搜索或過濾數據時變成惡夢。
但是我的完整建議是使用選項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.id
- >DISEASES_SYMTPOMS.disease_id
SYMTPOMS.id
- >DISEASES_SYMTPOMS.symptom_id
建立你的基地臺DISEASES
和SYMPTOMS
。然後建立一個代表前兩個表的JOIN
的表格。數據規範化將簡化應用程序的結構並防止數據重複,因爲每種疾病都可能有多種症狀,每種症狀都可能屬於多種疾病。
示例查詢(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.這是非常罕見的,在單個字段中存儲多於一個的值沒有按不會以痛苦和遺憾結束。 – JNevill
我想我可以使用DISTINCT來解決這個問題,我可以嗎? – conan
不同的是解決哪個問題?這個問題是適當的正常化,分別是未來的規模。想象一下,如果你想從現在起開始存儲症狀的屬性,並且你使用method1。你最終會得到來自地獄的加入。 – JNevill