mysql - 在 MySQL 中实现一对一关系时确定外键

标签 mysql database database-design entity-relationship one-to-one

我有两个简单的表“项目”和“订单”。为简单起见,我们假设一件商品只能在一个订单中,或者一个订单只能包含一件商品。

现在因为这可以使用简单的一对一关系来实现,所以我可以执行以下操作:

我可以将订单表的主键添加到项目表中,如下所示

//Table Items
item_id, item_name, order_id
1,        shoes,    1
2,        watch,    2

//Table Orders
order_id, customer
1,        James
2,        Rick

或者我可以将项目表的主键添加到订单表中,如下所示

//Table Items
    item_id, item_name
    1,        shoes
    2,        watch

//Table Orders
order_id, customer, item_id
1,        James,    1   
2,        Rick,     2

哪一个是正确的,为什么?是否有任何指导方针来决定哪把 key 放在哪里?当然,常识在上面的简单示例中会起作用,但在复杂示例中我们如何决定?

最佳答案

一对一 关系通常应该简单地合并到一个表中。如果没有任何矛盾,一对一 关系可能是未经考虑的决定的标志。

如果您真的想使用这种关系,完全取决于您将 FK 放在哪里。在应用 FK 时,您可能需要考虑可选性。然而,在 MySQL 中,它仍然不是真正的一对一关系,因为那里不支持延迟键。

关于mysql - 在 MySQL 中实现一对一关系时确定外键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16863411/

相关文章:

mysql - 如何为我的网站帖子实现查看系统?

mysql - 多sql select语句

php - mysql_fetch_array()/mysql_fetch_assoc()/mysql_fetch_row()/mysql_num_rows 等...期望参数 1 是资源

mysql - 检查与您的 MySQL 服务器版本对应的手册,以了解存储地址期间的正确语法错误

mysql - 如何通过终端在mysql中连续上传文件的全文

sql - 数据库设计 : Stored Record Edit History (Temporal Data)

MySQL 用每行唯一的时间戳更新多行

java - 字符串转 BigDecimal

java - 交易后刷新实体

mysql - 数据库规范化设计问题 : 2 tables sharing almost the same information