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

标签 database phpmyadmin entity-relationship composite-key relationships

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

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

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

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

最佳答案

NULL 值

It also means item will have 5 ids including its own. This all cause null values (apparently a big no no, which I can understand) because if place and price are optional and are not used on one entry to the items table I will have a null value there

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

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

如果您想返回 Item,无论它们是否有 ,请记住执行 LEFTRIGHT OUTER 连接PlacePrice 关联(对于没有关联的 Item,您将在可选表列中获得 NULL 值记录)和一个INNER连接,如果你想要确实Item有一个关联的可选记录。

复合键

复合键是由多列组成的表中的键。如果您的每个 PersonItemPlacePrice 都有一个 ID(即使它只是一个汽车-incrementing number)你不需要复合键 - 只需要每个表中的主键列,以及每个相关表的 Item 表中的外键列 - 例如item_idperson_idplace_idprice_id。您声明 Item 有自己的 ID,因此您不需要复合键 - 只需要 item_id 列上的主键。

关于使用 phpmyAdmin 的数据库关系(复合键),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2574228/

相关文章:

php - 在 MySQL 中存储 0.00001

phpmyadmin 3.4.0 ERD 转 PDF

database - 取消记录更改

php - 如何使用代码点火器框架在查询 php 中将动态对象转换为数组

php - 在表格中显示 PHP 中 SQL 查询的结果

database-design - ERD 关系 - 将 2 个可选实体连接到 1 个实体

c# - Entity Framework 中的派生类型

mysql - 左连接两个并集选择

sql - 有人可以举一个多对多关系的实际例子吗?

javascript - 在 mongodb 中创建或模拟联接