好的我最近问了一个问题,用户回答的是我应该规范化我的数据库,但我认为我不应该这样做.
逻辑是这样的
我在数据库中存储脚本,这些脚本是根据用户动态执行的.
例如,有一个脚本表
script_id | script_name
+----------------------+
12345 demo1
54462 demo2
90874 demo3
43058 demo4
Run Code Online (Sandbox Code Playgroud)
现在是用户表
allowed_script_ids
+-----------------+
21345|90874
Run Code Online (Sandbox Code Playgroud)
所以这里很简单,但是如果我删除了,那么会发生什么script_id 90874,但它不会从用户表中删除记录,因此他们建议我对数据库进行规范化,但是如果用户可以访问1000个脚本呢?我需要1000条记录吗?或者我应该继续前进的方式?即使我为每次访问插入每个记录条目,我也需要在每次撤销该用户的访问权限时删除它们.
1000行不是很多(在同一灯光下,也不是10,000,000),规范化您的数据库(即将用户与脚本相关联)非常适合这一点.如果你正在连接一个字符串,除非你正在使用TEXT(无论如何都是baaaaad!),你可能会遇到某种形式的字段长度限制,然后才能添加太多的脚本ID.
所以,是的,我还建议你在这个程度上正常化:
Script
script_id
name
Run Code Online (Sandbox Code Playgroud)
User
user_id
...
Run Code Online (Sandbox Code Playgroud)
User_Script
user_script_id
user_id
script_id
Run Code Online (Sandbox Code Playgroud)

..然后每个关系都会进入User_Script.
这比连接字符串要清晰得多,删除后,从字符串中搜索/替换.它将更快,更清洁,并帮助您以更加简化的方式实际查看数据库.
目前,您如何从数据库中获取所有脚本名称?使用上面的某种规范化设计,您可以运行此查询,类似于:
SELECT `user`.`first_name`, `script.name` FROM `User_Script`
INNER JOIN `Script` USING (`script_id`)
INNER JOIN `User` USING (`user_id`)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
193 次 |
| 最近记录: |