我需要在我的软件中通过Web界面允许用户设计的表单创建.即,他们创建一个问题,类型(文本,广播,复选框等),选项(如果需要)(无线电/支票),然后添加,并继续在此过程中,直到他们在表单中创建所有字段.
除了查看/填写/打印它们之外,不会对它们进行任何查询,即它们添加可以无限次填写的"问卷"(有些可能是20次,数百万次).
经过一些研究后,似乎EAV类型的解决方案听起来不错,除了那里有很多负面看法.很多人建议在这种情况下使用NoSQL数据库,但我并没有真正看到它们的优点 - 你仍然拥有一个包含许多字段的表单,然后是许多字段的结果.
某些字段(text/text_area/date)会有一个可能的值,但许多字段也有多个选项(单选按钮,选择下拉菜单,复选框).
这是传统SQL中的示例设计:
form:creator_id,name
form_field:form_id,order,question,type(text,text_area,date,radio,select,check)
form_field_option:form_field_id,名称,值,顺序(用于收音机/选择/检查)
form_result:form_id,application_id(不是我使用的名称,但所有结果都属于'应用程序')
form_field_value:form_result_id,form_field_id,form_field_option_id,value(如果选项字段的值为空,则text_field_option_id的文本字段为空)
基于此构建表单并获得结果似乎相当容易.它可能或可能不完全有效但是说一个典型的形式是5-30个问题,那会不会很糟糕?
把它放在NoSQL数据库中是否有任何优势,即Mongo或类似的东西?如果是这样,你能给我具体的例子,给我一个样本设计吗?我已经看到很多答案,比如'NoSQL更适合这个',但我没有这方面的经验,是因为更快的检索结果,还是什么?使用NoSQL会有什么缺点?
谢谢
我喜欢提高可读性并管理一些像这样的 HTML 源代码
<iframe src= "https://www.google.com/recaptcha/api2/anchor?k=6LeaOiITAAAAAF_A-e9qjM6TCgdt4-rqixnkkatL &co=aHR0cDovL3BsYXkuc3BvdGlmeS5jb20 &hl=de&v=r20160802154045&theme=dark&size=normal&cb=ap65yyq41qhy" title="reCAPTCHA-Widget" ...
Run Code Online (Sandbox Code Playgroud)
我的意思是断行属性名称是第一步:
<iframe src= "https://www.google.com/recaptcha/api2/anchor?k=6LeaOiITAAAAAF_A-e9qjM6TCgdt4-rqixnkkatL &co=aHR0cDovL3BsYXkuc3BvdGlmeS5jb20 &hl=de&v=r20160802154045&theme=dark&size=normal&cb=ap65yyq41qhy"
title="reCAPTCHA-Widget"
Run Code Online (Sandbox Code Playgroud)
然而,有没有一种方法可以分解那个长网址,我会看起来像这样:
"https://www.google.com/recaptcha/api2/anchor" +
"?k=6LeaOiITAAAAAF_A-e9qjM6TCgdt4-rqixnkkatL" +
"&co=aHR0cDovL3BsYXkuc3BvdGlmeS5jb20" +
...
"&size=normal" +
"&cb=ap65yyq41qhy"
Run Code Online (Sandbox Code Playgroud) 在 WordPress 中获取属性(使用 MySQL)似乎比必要的要慢。
(这是一个自我回答的问题,所以继续我的回答。)
假设我们有一个可以有多种类型的字段,例如:字符串或日期或XML数据类型.
现在我们有两种方法将它存储在数据库中
1-使用字符串类型字段+字段定义类型:丢失"类型感知"排序功能,需要强制转换
2-个单独的表(StringValues,DateValues,Decimal,XML ...等):指向值+字段定义类型的外键:某种程度上复杂,性能
如果仅存储唯一值,则第二种方法可能具有额外的优势:它将作为索引使用.
你有什么想法吗?
注1:最好考虑基于MS SQL Server 2008和Linq2SQL的项目
注2:也许我们将讨论如何在另一个问题中实现EAV,我在关系存储中询问EAV.
注3:类型可以更改,但不经常更改
这只是一个数据库概念问题:以下EAV模型的优缺点是什么?
型号1:
TABLE: attribute_value
======================================
| id | fk_id | attribute | value |
======================================
| 1 | 10 | FName | John |
| 2 | 10 | Lname | Doe |
| 3 | 55 | FName | Bob |
| 4 | 55 | Lname | Smith |
--------------------------------------
Run Code Online (Sandbox Code Playgroud)
型号2:
TABLE: attribute
==================
| id | attribute |
==================
| 1 | FName |
| 2 | Lname |
------------------
TABLE: value
=====================================
| id | attribute_id …Run Code Online (Sandbox Code Playgroud) 我想在magento中为我的产品设置一个新的属性集.此属性应该是某些选项的选择类型.
$installer->addAttribute('catalog_product', 'reserve', array(
'backend_label' => 'Attribute Reserve',
'type' => 'varchar',
'input' => 'select',
#'backend' => 'eav/entity_attribute_source_boolean',
'frontend' => '',
'source' => '',
#'default' => 1,
'global' => Mage_Catalog_Model_Resource_Eav_Attribute::SCOPE_GLOBAL,
'visible' => true,
'required' => false,
'user_defined' => true,
'searchable' => false,
'filterable' => false,
'comparable' => false,
'visible_on_front' => false,
'visible_in_advanced_search' => false,
'unique' => false,
'option' => array(
'value' => array(
'optionone' => array( 'O' ),
'optiontwo' => array( 'P' ),
'optionthree' => array( 'Kein Angabe' ),
)
), …Run Code Online (Sandbox Code Playgroud) 我有一个表格,有各种数字格式,如:
这些是varchar2列中的测量值,每个测量值都有一个带有上限和下限值的规范(格式相同),所以我想要的是这些边界之间的测量值
SELECT VALUE, LOW, HIGH FROM MEASUREMENTS
WHERE to_number(replace(VALUE,',','.'), '999999999D99999999999999999999999999999999999999','NLS_NUMERIC_CHARACTERS = ''.,''')
> to_number(replace(LOW,',','.'), '999999999D99999999999999999999999999999999999999','NLS_NUMERIC_CHARACTERS = ''.,''')
AND to_number(replace(VALUE,',','.'), '999999999D99999999999999999999999999999999999999','NLS_NUMERIC_CHARACTERS = ''.,''')
<=to_number(replace(HIGH,',','.'), '999999999D99999999999999999999999999999999999999','NLS_NUMERIC_CHARACTERS = ''.,''')
Run Code Online (Sandbox Code Playgroud)
这些查询适用于上面写的每个数字,除了像9.9E + 37这样的指数数字.我发现用TO_CHAR重写,但它不能用于varchar
有没有人可以比较存储为varchar的各种数字?谢谢
我将研究一个将使用EAV结构来存储对象数据的系统.模型本身将具有一些预定义的属性(坐标和日期/时间戳),即:
其余属性将由用户动态创建,并作为行添加到属性表中.这些行将被旋转并用作列以与值表对齐(不确定这是否需要解释,但更安全而不是抱歉).
属性关系的对象(或实体)是一对多的.
值与属性的属性是一对多关系.
我是Eloquent/Laravel的新手,但我已经阅读了关系文档并看到有一对多关系的功能,但是,我不清楚如何引用EAV中的所有数据(似乎更适合于RDBMS ).它会是这样的(请记住这是一个粗略的例子)?
class UserObject extends Eloquent {
public function object_data()
{
return $this->hasMany(attributes_data);
}
public function attributes_data()
{
return $this->hasMany('Values');
}
}
Run Code Online (Sandbox Code Playgroud)
基本上,我的问题是:
在检索与EAV相关的所有数据时,是否有一种可接受的(或正确的)方法来设计/编写模型?如果是这样,你能指出我的Eloquent/EAV方法的一些文档或教程吗?
一些想法:
我的想法是我需要为EAV的每个组件创建3个类(即一个用于实体组件数据,一个用于属性数据,一个用于值数据).
谢谢.
我有一个MySQL数据库,其中包含带有组/属性的产品/我创建了一个数据样本
http://sqlfiddle.com/#!2/7d8a04/1
create table products (
id int(10),
title varchar(50)
);
create table attributes (
id int(10),
title varchar(50)
);
create table filters (
id int(10),
attribute_id int(10),
title varchar(50)
);
create table product_filters (
id int(10),
product_id int(10),
attribute_id int(10),
filter_id int(10)
);
#products
insert into products select '1', '1stphone';
insert into products select '2', '2ndphone';
#attributes
insert into attributes select '1', 'ram';
insert into attributes select '2', 'cpu';
insert into attributes select '3', 'hdd';
#filters
insert into filters …Run Code Online (Sandbox Code Playgroud) 是否有必要设置属性_media_image与_media_attribute_id在CSV被上传?
所有图像都存储在CATALOG_PRODUCT_ENTITY_MEDIA_GALLERY中,而CATALOG_PRODUCT_ENTITY_VARCHAR中的缩略图,图像和small_image是否正确?根据CSV列格式
sku,image,image_label,small_image,small_image_label,thumbnail,thumbnail_label
图像只会在CATALOG_PRODUCT_ENTITY_VARCHAR中针对图像,small_image和缩略图的EAV attributes_id进行注册.因此,图像在前端product_list页面(作为缩略图)和product_view页面(作为产品图像)上可见.
但是当我们通过管理目录>管理产品进入产品选项而不是单击产品,然后单击左侧的图像选项卡时,将没有图像.原因是,图像不在"CATALOG_PRODUCT_ENTITY_MEDIA_GALLERY"中,并且要保存新的更新结果,Magento不会为基本图像,小图像和缩略图图像发送图像.当我们从管理员编辑任何产品时,这会导致图像丢失.
注意:我将图像上传到magento_root/media/catalog/import /.而且,目前我正在研究Magento 1.9.0.1.
谢谢!