使用phpmyAdmin(复合键)的数据库关系

问题描述:

我对制作一个好的关系数据库感到困惑。我正在使用phpmyAdmin来创建一个数据库。我有以下四个表格。不要担心这个事实,地点和价格是可选的,他们只是。使用phpmyAdmin(复合键)的数据库关系

  1. 人(强制性)
  2. 项目(强制性)
  3. 广场(可选)
  4. 价格(可选)

项目是主表。它会一直有人链接。 *我知道你会在表中加入mysql。 如果我想将表连接在一起,我可以使用组合键(使用每个表的ID),但是这是链接表的最正确方法吗?这也意味着项目将有5个包括它自己的ID。这一切都导致空值(显然是一个大的不,不,我可以理解),因为如果地点和价格是可选的,并且不用于项目表的一个条目,那么我将在那里有一个空值。请帮忙!

在此先感谢。我希望这是有道理的。

NULL值

这也意味着项目将有5个IDS包括它自己。这一切都导致空值(显然是一个很大的不,不,我可以理解),因为如果地方和价格是可选的,在一个条目的项目表中没有使用我将有一个空值有

我个人认为这是一种情况,其中NULL值是完美的,我当然不会有任何怀疑将它放入我的数据库设计中。

有一种方法,我看到其他人实现同样的事情没有NULL价值观是创建一个记录在可选表(在您的示例中的地点和价格)ID为0,表示没有相关记录 - 但这只是为应用程序的开发人员进行10次以上的工作以过滤这些记录 - 进行联接更容易,并且如果您没有取回任何记录,则可选表中没有相关记录。

记得刚做了,如果你想返回ItemLEFTRIGHT OUTER的JOIN不管他们是否有PlacePrice相关的(你会得到可选表中的列NULL值没有那个Item小号关联记录)和INNER加入如果您只有想要Item s 有一个关联的可选记录。

复合密钥

复合键是在该得分由一个以上的列的表中的键。如果您的每个Person,Item,PlacePrice都有一个ID(即使它只是一个自动递增的数字),您将不需要组合键 - 每个表中的主键列和外键列每个相关表的Item表 - 例如item_idperson_id,place_id, price_id。您声明Item拥有自己的ID,因此您不需要组合键 - 只是item_id列中的主键。

+0

你会如何确保在INSERT上填写正确的ID?例如,当我插入我没有得到正确的ID为其他表我需要用mysql语句做到这一点? – 2010-04-18 18:25:32