mysql - 在关系数据库中保存属性的良好做法

标签 mysql sql database logic

假设我的系统中有两种类型的用户。

会编程的人和不会编程的人。

我需要将两种类型的用户保存在同一个表中。 可以编程的用户与不能编程的用户有很多不同的属性,定义在另一个表中。

以下解决方案的优点是什么,还有更好的解决方案吗?

解决方案一

一个表包含具有相应属性的列。

Table `users`:
----------------------------
| id | name  | can_program |
----------------------------
| 1  | Karl  | 1           |
| 2  | Ally  | 0           |
| 3  | Blake | 1           |
----------------------------

方案二

两个表通过主键和外键相互关联。 一个表包含用户,另一个表只包含可以编程的人的 ID。

用户:

--------------
| id | name  | 
--------------
| 1  | Karl  |
| 2  | Ally  |
| 3  | Blake |
--------------

can_program:

---------------------
| id | can_program  | 
---------------------
| 1  | 1            |
| 3  | 1            |
---------------------

最佳答案

用户和允许他编程的属性之间存在 1-1 关系。我建议将此信息存储为表 users 中的附加列。创建额外的表基本上会导致与原始表具有 1-1 关系的额外存储结构。

关于mysql - 在关系数据库中保存属性的良好做法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55230278/

相关文章:

mysql - 为未找到的列显示空行或 0 的其余行

sql - WHERE(一组条件)OR(一组第二个条件)OR ...优雅地写

php - 仅在 mysql 数据库中插入一次。

python - Django 应用程序 View - 如何从 url 中的 django 数据库获取条目并从数据库获取 View 的更多信息?

mysql - 在 MySQL 中设置最终一致性(延迟提交)

mysql - 选择列表中出现无效错误,因为它不包含在聚合函数或 GROUP BY 子句中

php - 当我在 PHP/mySQL 中使用 MATCH、AGAINST 时警告 mysql_fetch_array

c# - 登录不区分大小写

mysql - Zope(页面模板)、Ajax/Javascript 和 MySQL

python - Django / python : raw sql with multiple tables