我目前正在为电子商务平台的产品部分设计数据库结构.它需要以这样的方式设计,使得可以销售具有无限多个不同属性的无限数量的不同类型的产品.
例如,笔记本电脑的属性可以是RAM,屏幕尺寸,重量等.书的属性可以是作者,ISBN,出版商等.
似乎EAV结构最合适.
假设上述情况,我是否可以将选择加入attribute_values_datetime表以获取正确的数据而不获取结果集并在表已知的情况下构建第二个查询?构建这种类型的查询是否会有很大的性能损失,或者下面的内容会更合适(尽管功能较少)
mysql sql database-design database-schema entity-attribute-value
我厌倦了对正则表达式的恐惧.这篇文章的主题仅限于正则表达式的PHP实现,但是,任何通用的正则表达式建议显然都会受到赞赏(即不要将我与不适用于PHP的范围混淆).
以下(我相信)将删除数字之间的任何空格.也许有更好的方法,但我仍然想了解发生了什么.
$pat="/\b(\d+)\s+(?=\d+\b)/";
$sub="123 345";
$string=preg_replace($pat, "$1", $sub);
Run Code Online (Sandbox Code Playgroud)
通过这种模式,我的解释是:
\b 一个词边界\d+ 一个或多个数字的子模式\s+ 一个或多个空格(?=\d+\b) 先行断言一个或多个数字后跟一个单词边界?问题:
/和尾随的目的是什么/?如何将模型添加到另一个模型的关系数组中?
例如
我想添加$domain,$owner->relations[]以便我可以$owner->domain稍后在我的代码中使用.
这样做的原因是,在一个特定的控制器中,我只需要来自每个模型的部分数据集,因此出于性能原因使用流利来查询连接,然后填充模型.
然后为了便于阅读,我想使用$owner->domain->id等
$domain->owner()->associate($owner);给了我一个$domain->owner选择
但后来我无法解决相反的版本
$owner->domain()->associate($domain)
$owner->domain()->attach($domain)
Run Code Online (Sandbox Code Playgroud)
两者都会导致以下致命错误
调用未定义的方法Illuminate\Database\Query\Builder :: [attach | associate]()
注意:我不想保存任何东西,因为我已经加载了我需要的所有数据.
我正在尝试安装,Laravel valet但我一直在(当我访问domain.dev时):
It works!
Run Code Online (Sandbox Code Playgroud)
我已经尝试了很多.例如:
remove valet
stop apache (apachectl stop)
composer global require laravel/valet
valet install
valet restart
Run Code Online (Sandbox Code Playgroud)
但那对我不起作用.我也安装Laravel Homestead 在一个流浪盒中.也许这与它有关?我可以访问我的Homestead网站.
我该如何解决这个问题?
我正在创建一个PHP脚本来比较两个数据库的模式.
我已经设法检查有关删除/添加的表,列,索引,引用的架构更改,但是当涉及到重命名的列时,我有点卡住了.
在以下示例中,源数据库包含最新的模式,目标数据库包含类似的模式,但可能已过期.
先决条件:
以目标数据库中的以下模式为例.
Field Type Null Key Default Extra
field1 int(11) NO NULL
field2 int(11) NO NULL
field3 int(11) NO NULL
Run Code Online (Sandbox Code Playgroud)
然后在源数据库中假设以下模式.
Field Type Null Key Default Extra
field1 int(11) NO NULL
field4 int(11) NO NULL
field3 int(11) NO NULL
Run Code Online (Sandbox Code Playgroud)
不知道什么明确发生,我无法确定是否field2改为field4途经DROP, ADD AFTER或CHANGE COLUMN.以下两个查询在表结构方面实现了相同的结果,但使用前者丢失了数据.
(1) ALTER TABLE `demo` DROP `field2`
ALTER TABLE `demo` ADD `field4` INT( 11 ) NOT NULL AFTER `field1`
(2) ALTER TABLE `demo` CHANGE `field2` …Run Code Online (Sandbox Code Playgroud) 我正在寻找一个合适的过程来保存数据库中的行(及其关系)的修订或快照.
以电子商务平台为例 -
我看了几个概念,一个是重复的表,另一个是临时数据库,另一个是保留修订版ID和活动标志.
虽然我很欣赏没有人能真正告诉我最适合我应用的解决方案,因为这是一个容易接受意见的问题,我希望有人可能通过比较来证明优势/劣势.我已经阅读了很多关于SO的问题,以及关于各种实现的一些文章,但没有一个真正比较每个想法或指出它们最适合的地方.下面我概述了我对每个概念的理解.
将信息存储在与需要快照的数据相关的行中.即在一个在线商店的订单表中的列中保留一个地址.
"时间感知"的数据库行,即它们的上下文是两个日期时间之间的时间.数据可以在时间表位于时间表的上下文之间加入.
有一个表来跟踪所有表的更改并记下它所涉及的行以及它在时间方面何时有效.
我已经在这里查看了以下有关SO和其他资源的问题
编辑:我没有用特定的DBMS标记这篇文章的原因,因为我希望这个概念尽可能多地与平台一起工作,目前是DBMS独立的,抽象层允许它与MySQL一起工作MSSQL但希望将来能够支持其他人.
我有一个关于MySQL的特殊问题.请查看下面的查询和结果集:
SELECT COUNT(c.Population) AS c, c.City AS cc
FROM City c
GROUP BY c.City
ORDER BY c.City;
Run Code Online (Sandbox Code Playgroud)
261 | Bristol
----------------
910 | London
----------------
241 | Manchester
----------------
Run Code Online (Sandbox Code Playgroud)
我想得到COUNTs的SUM,所以在这种情况下我想在下一行或新列中看到'1412',这并不重要.
有什么建议?我试图对此应用子查询,但我找不到合适的解决方案.
干杯
我正在尝试编写一个bash脚本来配置服务器的各个方面.这里的上下文是用另一个值替换conf文件(ini格式)中的变量值.
背景是
[ssh-iptables]
enabled = false
Run Code Online (Sandbox Code Playgroud)
而我只需要将false更改为true.
通常我只是简单地做一下 sed
sed -i 's/^enabled = false/enabled = true/g' /etc/fail2ban/jail.conf
Run Code Online (Sandbox Code Playgroud)
但enabled = false存在于多个地方.
我尝试过使用但awk没有成功
awk -F ":| " -v v1="true" -v opt="enabled" '$1 == "[ssh-iptables]" && !f {f=1}f && $1 == opt{sub("=.*","= "v1);f=0}1' /etc/fail2ban/jail.conf
Run Code Online (Sandbox Code Playgroud)
上面的内容源自这个论坛帖子,但我对如何在脚本中使用它以使其工作没有足够的理解.它似乎只是相当于cat /etc/fail2ban/jail.conf
我发现了一些相当长的脚本并不理想,因为这会发生在大量的ini文件中,所以我希望有人可以帮我纠正上面的代码或者指出我正确的方向.
如果这属于ServerFault,请道歉,但因为它的脚本而不是服务器配置本身的错综复杂,我在这里可能会更贴切.
我目前正在开发一个处理响应式设计的项目,整个布局应该使用HTML和CSS来实现.我知道可以使用java脚本将内容从一个列布局移动到另一个列布局而不重复内容,但是使用HTML和CSS可以实现相同的目的吗?
举例来说,下面会在桌面设计上呈现这样的效果
--page-------------------
| -------- -------- |
| |div 1 | | div 2| |
| -------- -------- |
-------------------------
Run Code Online (Sandbox Code Playgroud)
但随后设计师已经转向移动设计的div1下方div2.
--page--------
| -------- |
| |div 2 | |
| -------- |
| -------- |
| |div 1 | |
| -------- |
--------------
Run Code Online (Sandbox Code Playgroud)
显然,块级元素堆叠的自然方式是相反的方式.
--page-------------------
| -------- -------- |
| |div 1 | | div 2| | <--- shown on desktop
| -------- -------- |
| -------- |
| |div 1 | | <--- …Run Code Online (Sandbox Code Playgroud) 我创建了一个 Lambda 函数,它从 DynamoDB 检索一些数据,并输出一些 JSON。我想做的是在 lambda@edge 中运行这个函数并生成一个响应,我可以使用 Cloudfront 缓存该响应。
\n\n我面临的问题是,我在 DynamoDB 中的数据(当前)使用全局表复制到两个区域(us-east-2 和 eu-west-1),而 lambda@edge 显然在许多区域中运行。
\n\n这让我无法使用AWS_REGION在 lambda 环境中使用。例如,如果请求在 us-west-1 中运行,环境变量将反映这一点,并且它会尝试从 us-west-1 检索数据,而数据实际上应该转到 us-east-2。
虽然我承认我还没有尝试过这个(但)我想知道我是否可以在 Route53 中设置自己的基于延迟的路由,以将 ddb.mydomain.com 指向我使用的区域中 DynamoDB 的端点(假设 SAN 证书是)设置一下可以吗?
\n\n我想也许我可以根据下面的示例映射代码中的区域
\n\nconst process = { env: { AWS_REGION: \'us-east-1\' } };\n\nconst regions = {\n \'eu-west-1\': [\'eu-west-1\', \'eu-central-1\', \'...\'],\n \'us-east-2\': [\'us-west-1\', \'us-east-1\', \'...\'],\n};\n\nconst activeRegions = Object.keys(regions);\n\nconst region = activeRegions.find(\n key => regions[key].includes(process.env.AWS_REGION)\n) || activeRegions[0];\n\nconsole.log(region) // us-east-2\nRun Code Online (Sandbox Code Playgroud)\n\n这感觉维护起来比其价值要多,并且依赖于我对最佳选择区域的假设。我还必须保持我的区域列表是最新的。
\n\n我可以仅使用该区域的前两个字母来限制当新数据中心稍微开放时更新它的需要,但它仍然不理想 …