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

时间:2010-04-04 11:16:16

标签: database phpmyadmin entity-relationship composite-key relationships

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

  1. 人(强制性)
  2. 项目(强制性)
  3. 放置(可选)
  4. 价格(可选)
  5. 项目是主要表格。它总是会有人联系在一起。 *我知道你加入mysql表。 如果我想将表链接在一起,我可以使用复合键(使用每个表中的ID),但这是链接表的最正确方法吗?它还意味着项目将包含5个ID,包括它自己的ID。这一切都导致空值(显然是一个很大的不,我可以理解),因为如果地点和价格是可选的,并且没有在项目表的一个条目上使用,那么我将有一个空值。请帮忙!

    提前致谢。我希望这是有道理的。

1 个答案:

答案 0 :(得分:2)

空值

  

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

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

我看到其他人在没有NULL值的情况下实现同样的事情的一种方法是在可选表格(示例中的地点和价格)中创建一个ID为0的记录,表示没有相关记录 - 但这只会让应用程序的开发人员多花10倍的时间来过滤这些记录 - 它更容易进行连接,如果你没有得到任何记录,则可选表中没有相关记录。

如果您想要返回LEFT,无论他们是否RIGHT OUTERItem相关联,请务必记住PlacePrice加入如果希望获得NULL,那么您将在Item的可选表格列中获得没有关联记录的INNER值和Item加入执行Person具有关联的可选记录。

复合键

复合键是表中由多个列组成的键。如果您的ItemPlacePriceItem都拥有ID(即使它只是一个自动递增的数字),您将不需要复合键 - 只是每个表中的主键列,以及每个相关表的item_id表中的外键列 - 例如person_idplace_idprice_idItem。您声明item_id有自己的ID,因此您不需要复合键 - 只需{{1}}列上的主键。

相关问题