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

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

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

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

有帮助吗?

解决方案

空值

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

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

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

只需记住做一个 LEFT 或者 RIGHT OUTER 如果你想回来就加入 Item无论他们是否有 Place 或者 Price 关联(你会得到 NULL 可选表列中的值 Item没有关联记录)和 INNER 加入如果你 仅有的 想要 Item是这样的 有关联的可选记录。

复合键

复合键是表中由多个列组成的键。如果你的每一个 Person, Item, PlacePrice 都有一个 ID(即使它只是一个自动递增的数字),您不需要复合键 - 只需每个表中的主键列和表中的外键列 Item 每个相关表的表 - 例如 item_id, person_id, place_id, price_id. 。你说 Item 有自己的 ID,因此您不需要复合键 - 只需要主键即可 item_id 柱子。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top