分割关系table
Relation between divided table
我想找出最好的解决方案,以防万一我想创建两个 table,其中一个会存储 user_id
和 name
等列, address
等,第二个 table 将仅用于存储登录名和密码数据。
到目前为止,我的想法是创建没有主键的登录名 table。我可以在第一个 table 中使用引用 user_id
的外键,并在 update/delete 中使用级联关系,这样每个 table 中的数据将保持相关。但我担心我的解决方案不好。你有更好的想法吗?顺便说一句,我还没有进入索引概念,所以你能帮我吗?
经验法则:如果你有一对处于 1:1 关系中的表,那么你可能设计错了。
在保证垂直分区的情况下存在性能异常,但您的情况并非如此。
"hide" 列有多种方法:
- 垂直分区(如您所建议的)以及对表的权限
- 列权限
VIEWs
,以及对表和视图的权限。
- API 代码(PHP 等),甚至不允许非管理员用户编写 SQL 语句。
我更喜欢最后一个选项。
密码应通过加盐+加密的单向哈希存储。然后,如果它们不小心暴露,密码也不会泄露。
至于FOREIGN KEYs
,我更喜欢在应用程序中编码业务逻辑,而不是依赖于 FKs 的有限功能。
我想找出最好的解决方案,以防万一我想创建两个 table,其中一个会存储 user_id
和 name
等列, address
等,第二个 table 将仅用于存储登录名和密码数据。
到目前为止,我的想法是创建没有主键的登录名 table。我可以在第一个 table 中使用引用 user_id
的外键,并在 update/delete 中使用级联关系,这样每个 table 中的数据将保持相关。但我担心我的解决方案不好。你有更好的想法吗?顺便说一句,我还没有进入索引概念,所以你能帮我吗?
经验法则:如果你有一对处于 1:1 关系中的表,那么你可能设计错了。
在保证垂直分区的情况下存在性能异常,但您的情况并非如此。
"hide" 列有多种方法:
- 垂直分区(如您所建议的)以及对表的权限
- 列权限
VIEWs
,以及对表和视图的权限。- API 代码(PHP 等),甚至不允许非管理员用户编写 SQL 语句。
我更喜欢最后一个选项。
密码应通过加盐+加密的单向哈希存储。然后,如果它们不小心暴露,密码也不会泄露。
至于FOREIGN KEYs
,我更喜欢在应用程序中编码业务逻辑,而不是依赖于 FKs 的有限功能。