Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/76.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_Sql_Mysql_Database - Fatal编程技术网

Php 我的最后一个mysql数据库,有人能检查一下表的制作是否正确吗?

Php 我的最后一个mysql数据库,有人能检查一下表的制作是否正确吗?,php,sql,mysql,database,Php,Sql,Mysql,Database,我有这些桌子: category table: cat_id (PK) cat_name category_options table: option_id (PK) cat_id (FK) option_name option_values table: value_id (PK) option_id (FK) value classifieds table: ad_id (PK) (VARCHAR) something like "Bmw330ci_28238239832" poste

我有这些桌子:

category table:
cat_id (PK)
cat_name

category_options table:
option_id (PK)
cat_id (FK)
option_name

option_values table:
value_id (PK)
option_id (FK)
value

classifieds table:
ad_id (PK) (VARCHAR) something like "Bmw330ci_28238239832"
poster_id (FK)
cat_id (FK)
headline
description
price
etc....

posters table:
poster_id (PK)
name 
email
tel
password
etc....
三个主要问题:
1-以上是否足够好?它至少能满足我所有的需要

有时候当我尝试不同的查询时,我会得到奇怪的结果。。。您是否可以编写一个PHP查询字符串,该字符串将仅从ad_id获取一个完整的广告?(假设您唯一的变量是ad_id)

3-在查询字符串中,我必须指定连接的所有不同表才能显示广告吗?难道我不能使用“SELECT*FROM classifieds WHERE ad_id=$ad_id”这样的东西,它会自动处理链接,也就是获取所有相关信息吗?

谢谢,如果你需要更多的信息,请告诉我

1)如果它满足了你的需求,那它不是“足够好”了吗?但说真的,我同意davek的观点,即您应该将ad_id字段设置为int/bigint,我还建议对
海报
表使用相同的设置。将名称设为常规值字段,并为其创建一个autonum int/bigint PK字段。如果出于任何原因,用户希望更改其名称(可能出于隐私考虑),那么您也必须更新数据库中的任何外键。有了自动编号键,就不会有这个问题

2) 是的,据我所知,您应该能够通过只知道
ad\u id
来收集广告上的所有数据

3) 不,您还需要做更多的工作,要么在
选择
查询中加入equi,要么使用
加入
关键字将数据拉入。MySQL没有“元”关系模型(如MS Access),因此它不会自动理解您的主键/外键关系。

1)如果它满足您的需要,那么这难道不是“足够好”吗?但说真的,我同意davek的观点,即您应该将ad_id字段设置为int/bigint,我还建议对
海报
表使用相同的设置。将名称设为常规值字段,并为其创建一个autonum int/bigint PK字段。如果出于任何原因,用户希望更改其名称(可能出于隐私考虑),那么您也必须更新数据库中的任何外键。有了自动编号键,就不会有这个问题

2) 是的,据我所知,您应该能够通过只知道
ad\u id
来收集广告上的所有数据


3) 不,您还需要做更多的工作,要么在
选择
查询中加入equi,要么使用
加入
关键字将数据拉入。MySQL没有“元”关系模型(如MS Access),因此它不会自动理解您的主键/外键关系。

您有严重的设计问题。永远不要使用名称作为主键;它不是唯一的,它可能会发生变化!例如,女人结婚时会改名。事实上,根本不要将任何varchar用作pk。改用代理键。代理键不会更改,文本键值通常会更改,而且速度也较慢

永远不要将名称存储为一个字段,这是一个糟糕的做法。在最短的时间内,您需要名字、姓氏、中间名和后缀。您还需要一个自动递增的id字段,以便芝加哥某个地址的John Smith可以与芝加哥其他地方的John Smith一起存在于表中

不,如果不使用联接将相关表添加到查询中,则无法从相关表中获取所有数据。这是数据库101,如果您不知道这一点,那么您对关系数据库的理解还不足以设计一个数据库。对连接和查询进行一些研究。你可以从广告id中获得广告的所有信息,因为你当前的关系似乎正常


向查询中添加其他表时,不要使用隐含联接。它们过时了18年。通过使用显式联接正确学习。

您有严重的设计问题。永远不要使用名称作为主键;它不是唯一的,它可能会发生变化!例如,女人结婚时会改名。事实上,根本不要将任何varchar用作pk。改用代理键。代理键不会更改,文本键值通常会更改,而且速度也较慢

永远不要将名称存储为一个字段,这是一个糟糕的做法。在最短的时间内,您需要名字、姓氏、中间名和后缀。您还需要一个自动递增的id字段,以便芝加哥某个地址的John Smith可以与芝加哥其他地方的John Smith一起存在于表中

不,如果不使用联接将相关表添加到查询中,则无法从相关表中获取所有数据。这是数据库101,如果您不知道这一点,那么您对关系数据库的理解还不足以设计一个数据库。对连接和查询进行一些研究。你可以从广告id中获得广告的所有信息,因为你当前的关系似乎正常


向查询中添加其他表时,不要使用隐含联接。它们过时了18年。通过使用显式联接正确学习。

如果可能的话,我会将ad_id更改为int/bigint值,并将您的VARCHAR存储在新列中。摆脱@davek建议等分类广告中的VARCHAR PK,让海报使用类似于您在其他表中所做的int id PK(poster_id),并将名称设置为数据列,因此,在int上加入,但显示名称。很好,如果你需要更改一个名字,比如婚礼/离婚后发生的事情。哦,我错过了,实际上我有一个poster_id字段!谢谢我认为您应该学习如何使用SQL,以便知道如何进行适当的查询:并获得完整的广告(可以返回多行):从分类中选择*c内部连接海报p ON c.poster\u id=p.poster\u id内部连接类别a ON c.cat\u id=a.cat\u id内部连接类别选项o ON a.cat\u id=o.cat\u id内部连接选项v ON o.option\u id=v.option\u id其中ad\u id=xI将ad\u id更改为int/bigint值(如果可能),并将VARCHAR存储在ne中