mysql - 可以接受 NULL 外键吗?

标签 mysql sql

我认为这应该是一个简单的问题,但是可以使用 NULL 外键吗?

我想详细说明一下,假设我正在为用户创建一个数据库,不同类型的用户需要不同的数据集......设计这个数据库的最佳实践是什么?

这是我的想法,作为一个粗略的例子:(我是正确的还是偏离的?)

“用户”: 编号 |类型(即“1”表示基本,“2”表示高级)| basic_id(可为空的外键)| Advanced_id(可为空的外键)|电子邮件 |名称 |地址 |电话(等等)

“用户基本”: 编号 | user_id(外键)| (其他数据仅针对基础用户)

“用户高级” 编号 | user_id(伪造 key )| (其他数据仅高级用户需要)

我感觉它的设计很糟糕,因为如果不先检查用户的类型,就无法在一个查询中获取所有数据,但我真的不喜欢在一个表中包含大量 NULL 的想法数据。设计这个的最佳方法是什么?

最佳答案

当然,使用 NULL 外键是可以的。

不过,就您而言,我倾向于做两件事之一。如果基本用户和高级用户的列确实不多,您可以将它们包含在 users 表中。这将是典型的方法。

否则,您可以将 user_id 声明为所有三个表中的主键,并且仍然具有辅助表(users_basicusers_advanced)的外键关系)到主要(用户)。在 MySQL 中保持关系的独特性很棘手,而且可能不值得做。

关于mysql - 可以接受 NULL 外键吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36025469/

相关文章:

SQL::Self 加入表以满足特定条件?

mysql - 数据库 INSERT INTO SET ... WHERE(SELECT ...)

php - 在 codeigniter 中更新数据时如何显示通过 id 获取的选定选项

java - 将 JDBC 驱动程序连接到 MSSQL 数据库时出现问题

sql - 如果没有记录,如何使 MySQL SUM 查询返回零而不是 null?

mysql - SQL 两个或多个具有相同属性的SQL

MySql 在三个表中的任何一个中找到匹配项?

mysql - ActiveRecord:从数据库中的mediumblob中提取并命名图像

sql - 使用 Null 值更新列

mysql - 学习 SQL Server 2008 和存储过程