1

我对制作一个好的关系数据库有点困惑。我正在使用 phpmyAdmin 创建数据库。我有以下四个表。不要担心地点和价格是可选的,它们只是。

  1. 人(必填)
  2. 项目(必填)
  3. 地点(可选)
  4. 价格(可选)

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

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

4

1 回答 1

2

空值

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

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

我看到其他人在没有NULL值的情况下实现相同目标的一种方法是在可选表(在您的示例中为地点和价格)中创建一条记录,其 ID 为 0,表示没有相关记录 - 但这只会增加 10 倍的工作量让应用程序的开发人员过滤掉这些记录 - 进行连接要容易得多,如果您没有返回任何记录,则可选表中没有相关记录。

只要记住执行 aLEFTRIGHT OUTERjoin 如果您想返回Items 而不管它们是否有 aPlacePrice关联(您将NULL在可选表列中为Item没有关联记录的 s 获取值)和INNERjoin 如果您想要具有关联的可选记录Item的 s

复合键

复合键是由多个列组成的表中的键。如果您的每个, 和PersonallItem都有一个 ID(即使它只是一个自动递增的数字),您将不需要复合键 - 每个表中只需要一个主键列,每个表中都有一个外键列相关表 - 例如, , , . 您声明它有自己的 ID,因此您不需要复合键 - 只需列上的主键。PlacePriceItemitem_idperson_idplace_idprice_idItemitem_id

于 2010-04-13T09:00:05.230 回答