我对制作一个好的关系数据库感到困惑。我正在使用phpmyAdmin来创建数据库。我有以下四个表。不要担心这个事实,价格是可选的。
项目是主要表格。它总是会有人联系在一起。 *我知道你加入mysql表。 如果我想将表链接在一起,我可以使用复合键(使用每个表中的ID),但这是链接表的最正确方法吗?它还意味着项目将包含5个ID,包括它自己的ID。这一切都导致空值(显然是一个很大的不,我可以理解),因为如果地点和价格是可选的,并且没有在项目表的一个条目上使用,那么我将有一个空值。请帮忙!
提前致谢。我希望这是有道理的。
答案 0 :(得分:2)
空值
这也意味着项目将包含5个ID,包括它自己的ID。这一切都导致空值(显然是一个很大的不,我可以理解),因为如果地点和价格是可选的,并且没有在项目表的一个条目上使用我将在那里有一个空值
我个人认为这是NULL
值完美的一种情况,我当然不会怀疑将其放入我的数据库设计中。
我看到其他人在没有NULL
值的情况下实现同样的事情的一种方法是在可选表格(示例中的地点和价格)中创建一个ID为0的记录,表示没有相关记录 - 但这只会让应用程序的开发人员多花10倍的时间来过滤这些记录 - 它更容易进行连接,如果你没有得到任何记录,则可选表中没有相关记录。
如果您想要返回LEFT
,无论他们是否RIGHT OUTER
或Item
相关联,请务必记住Place
或Price
加入如果仅希望获得NULL
,那么您将在Item
的可选表格列中获得没有关联记录的INNER
值和Item
加入执行的Person
具有关联的可选记录。
复合键
复合键是表中由多个列组成的键。如果您的Item
,Place
,Price
和Item
都拥有ID(即使它只是一个自动递增的数字),您将不需要复合键 - 只是每个表中的主键列,以及每个相关表的item_id
表中的外键列 - 例如person_id
,place_id
,price_id
,Item
。您声明item_id
有自己的ID,因此您不需要复合键 - 只需{{1}}列上的主键。