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

时间:2019-03-18 21:26:12

标签: mysql sql logic relational-database

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

可以编程的人和不能编程的人。

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

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

解决方案1 ​​

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

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

解决方案2

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

users

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

can_program

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

2 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:1)

为什么不仅仅具有某种programmer_profiles表与之具有一对多关系的users表?

如果programmer_profiles中有关联的记录,那么他们可以编程,否则认为他们不能。

这更加灵活,因为您可以添加其他提供不同属性的x_profiles表,即使其中某些表具有相同的名称。