mysql - 数据库连接-数据库设计-父级-子级-子级的子级

标签 mysql database database-design

我有一个关于数据库设计的问题 - 最好的方法是什么以及如何做。我通常就是这样做的。 ^^

简单示例:我有 3 个表

用户表

user_id      name     
2           Name1     
3           Name2 

设施表

facility_id      facility_name     user_id
13                facility1            2
14                facility2            3

地板 table (这就是我所做的 我在这里添加用户 ID ^_^ )

floor_id      floor_name      facility_id       ( user_id )
5             floor1             13                  2
6             floor2             14                  3

因此,在这里您不必将用户连接添加到楼层表,因为您可以将其连接到连接楼层表的设施。

但我还是倾向于添加它以方便查询..这是一个不好的做法吗?

最佳答案

我可以看到,在 Floor 表中添加 user_id 非常方便,您可以对 Users 表进行单一联接。然而,存在不一致的可能性。假设有人手动输入数据库:

floor_id      floor_name      facility_id       ( user_id )
5             floor1             13                  2
6             floor2             14                  2

现在,如果您通过设施到达用户,我们会得到用户 3,如果我们直接从楼层到达用户,我们会得到用户 2。

可以通过指定设施和楼层之间的外键关系位于两列(user_id,facility_id)来强制执行一致性。您仍然可以将楼层加入到用户,但甚至无法手动在楼层中输入不一致的 (facility_id, user_id),该对必须与设施 (id, user_id)< 中的现有行相匹配.

关于mysql - 数据库连接-数据库设计-父级-子级-子级的子级,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58194416/

相关文章:

java - 如何从数据库创建字符串值

mysql - CodeIgniter、事件记录、JOIN 有帮助吗?

sql-server - 为多个表中的每一行创建全局 ID 以用于通知

mysql - 如何从表mysql中取出8个不同的行?

php - 如何查询多个表并使用附加

mysql - 从 Zend Framework 2 中生成的 MYSQL 中删除引号

MySQL - 存储用户所在的组

mysql - MySQL AVG()函数返回错误值

sql - 处理 MySQL 中缺失的列

mysql匹配不返回不区分大小写的结果