Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/84.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/joomla/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 分割表之间的关系_Mysql_Sql_Database_Database Design - Fatal编程技术网

Mysql 分割表之间的关系

Mysql 分割表之间的关系,mysql,sql,database,database-design,Mysql,Sql,Database,Database Design,我正在试图找出最好的解决方案,当我想创建两个表时,其中一个表将存储user\u id和name、address等列,第二个表将仅用于存储登录和密码数据 到目前为止,我的想法是创建没有主键的登录表。我可以在第一个表中使用引用到user\u id的外键,并在更新/删除时使用级联关系,以便每个表中的数据保持相关。但我担心我的解决方案不好。你有更好的主意吗?顺便说一句,我还不了解索引的概念,所以你也能帮我一下吗?经验法则:如果你有一对1:1关系的表,那么你可能设计错了 在保证垂直分区的情况下,性能也有例

我正在试图找出最好的解决方案,当我想创建两个表时,其中一个表将存储
user\u id
name
address
等列,第二个表将仅用于存储登录和密码数据


到目前为止,我的想法是创建没有主键的登录表。我可以在第一个表中使用引用到
user\u id
的外键,并在更新/删除时使用级联关系,以便每个表中的数据保持相关。但我担心我的解决方案不好。你有更好的主意吗?顺便说一句,我还不了解索引的概念,所以你也能帮我一下吗?

经验法则:如果你有一对1:1关系的表,那么你可能设计错了

在保证垂直分区的情况下,性能也有例外,但您的情况并非如此

有多种方法可以“隐藏”列:

  • 垂直分区(如您所建议的)以及对表的权限
  • 对列的权限
  • 视图
    ,以及对表和视图的权限
  • API代码(PHP等),甚至不允许非管理员用户编写SQL语句
我喜欢最后一个选择

密码应该通过盐渍+加密的单向散列存储。然后,如果它们意外暴露,密码不会被泄露


至于
外键
,我更喜欢在应用程序中编码业务逻辑,而不是依赖FKs的有限功能。

为什么需要在不同的表中使用
登录
?每个
用户
必须有1个
登录名
(不是更多)?此外,不带
主键的表也不是一个好的做法。你的数据库管理系统是什么?我使用MySQL。我认为将登录/密码与“业务”分开是一个很好的做法。我只解析一次登录/密码数据,当用户几乎一直尝试登录和“业务”数据时。我的意思是,您可以将数据存储在一个表中,只检索必要的信息。您可以设置一个类似于
login\u active
的字段,以便在需要时禁用
login
。如有必要,您还可以将
user\u设置为active
。一般来说,除非有必要,否则不要将事情过于复杂。也要小心。您必须防止应用受到
SQL注入攻击
。我认为在这种情况下,你需要分割数据。您还需要考虑是否有用户(而不是应用程序用户)可以访问您的数据库,这些用户必须能够访问该表,但不允许查看登录。非常感谢您。顺便说一句,我该如何制作您在las句子中提到的内容?我的意思是,如果您的员工可以直接访问数据库,但不允许查看用户
登录数据
,那么您需要划分表或在列级别设置特定权限(如果可能的话)。您还可以编写一个
视图
,其中包含除敏感信息之外的所有列,或者编写一个小网页,以允许管理除
登录信息
之外的所有数据。一般来说,有很多东西需要阅读:)。你的问题太宽泛了,就像“教我写字”。