Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/285.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/kubernetes/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 创建mysql表的更好方法是什么?_Php_Mysql - Fatal编程技术网

Php 创建mysql表的更好方法是什么?

Php 创建mysql表的更好方法是什么?,php,mysql,Php,Mysql,根据我的情况,我应该将所有症状合并成一行,作为下面的方法1还是创建更多行的方法2。我不喜欢方法1的原因是我必须使用-来分离每个症状,然后我需要使用php explode('-')来分离它们,并使用like来匹配它们 方法2将创建更多的行,我想我将创建更多的表来分隔它们 方法1: disease symptoms HIV pain-cough-hair loss Flu cought-running nose-fever

根据我的情况,我应该将所有症状合并成一行,作为下面的方法1还是创建更多行的方法2。我不喜欢方法1的原因是我必须使用-来分离每个症状,然后我需要使用php explode('-')来分离它们,并使用like来匹配它们

方法2将创建更多的行,我想我将创建更多的表来分隔它们

方法1:

disease           symptoms
HIV               pain-cough-hair loss
Flu               cought-running nose-fever
cacer             lose weight-fever-fatigue
方法2:

disease       symptoms
HIV           pain
HIV           cough     
HIV           hair loss
...           ...
...           ...

这取决于您希望数据库规范化的程度。更规范化的方法是创建一个包含所有症状的症状表,一个包含所有疾病的疾病表,另一个表可能通过疾病id和症状id将疾病与症状链接起来。标准化程度较低的方法类似于方法1,其中将所有症状作为字段包含在表中,并用分隔符分隔,或者如果使用支持数组的数据库,则将其放入数组中

疾病
症状
创建两个
主表
。然后创建第三个表,例如。
disease\u symptom
包括两个外键列,例如
disease\u id
&
symptom\u id
,并参考相应的主表。在两种方法中,方法2是首选方法。正如@jnevil所指出的,在搜索或过滤数据时,在一列中存储多个数据段会成为一场噩梦

然而,我的全部建议是使用选项3。请看下面的设计:

表1:疾病

+------+-----------+
|id |名称|
+------+-----------+
|1 |艾滋病毒|
|------|-----------|
|2 |流感|
|------|-----------|
|3 |癌症|
+------+-----------+
主键:

  • id
表2:症状

+------+-----------+
|id |名称|
+------+-----------+
|1 |疼痛|
|------|-----------|
|2 |咳嗽|
|------|-----------|
|3 |脱发|
+------+-----------+
主键:

  • id
表3:疾病-症状

+-------------+--------------+
|疾病|症状| id|
+--------------+--------------+
|           1  |           1  |
|--------------|--------------|
|           1  |           2  |
|--------------|--------------|
|           1  |           3  |
+--------------+--------------+
主键:

  • (疾病id、症状id)
外键:

  • DISEASES.id
    ->
    DISEASES\u SYMTPOMS.disease\u id
  • SYMTPOMS.id
    ->
    疾病\症状\ id
建立基本表
疾病
症状
。然后建立第三个表,表示前两个表的
连接。这种数据规范化将简化应用程序的结构,并防止数据重复,因为每个疾病都可能有多个症状,每个症状都可能属于多个疾病

示例查询(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;
示例查询结果:

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 |疾病|症状|名称|
+------+----------------+----------------+
|1 | HIV |疼痛|
|------|----------------|----------------|
|1 | HIV |咳嗽|
|------|----------------|----------------|
|1 | HIV |脱发|
+------+----------------+----------------+

方法2。在一个字段中存储多个值不会导致痛苦和遗憾是非常罕见的。我想我可以用DISTINCT来解决这个问题,可以吗?DISTINCT来解决哪个问题?问题在于适当的正常化以及未来的规模。想象一下,如果您想从现在起一年后开始存储症状的属性,然后使用method1。你会得到地狱的加入。谢谢你的时间。