使用 phpmyAdmin 的数据库关系(复合键)
-
24-09-2019 - |
题
我对制作一个好的关系数据库有点困惑。我正在使用 phpmyAdmin 创建数据库。我有以下四张表。不用担心,事实上地点和价格是可选的,它们就是这样。
- 人(必填)
- 项目(必填)
- 地点(可选)
- 价格(可选)
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
, Place
和 Price
都有一个 ID(即使它只是一个自动递增的数字),您不需要复合键 - 只需每个表中的主键列和表中的外键列 Item
每个相关表的表 - 例如 item_id
, person_id
, place_id
, price_id
. 。你说 Item
有自己的 ID,因此您不需要复合键 - 只需要主键即可 item_id
柱子。