我们开发商业应用程序.我们的客户要求提供自定义字段支持.例如,他们想要在Customer表单中添加一个字段.
存储字段值的已知设计模式和有关字段的元数据有哪些?
我现在看到这些选项:
选项1:将varchar类型的Field1,Field2,Field3,Field4列添加到我的Customer表中.
选项2:在customer表中添加一个XML类型的列,并将自定义字段的值存储在xml中.
选项3:添加CustomerCustomFieldValue表,其中包含varchar类型的列,并在该列中存储值.该表还有一个CustomerID,一个CustomFieldID.
CustomerID, CustomFieldID, Value
10001, 1001, '02/12/2009 8:00 AM'
10001, 1002, '18.26'
10002, 1001, '01/12/2009 8:00 AM'
10002, 1002, '50.26'
Run Code Online (Sandbox Code Playgroud)
CustomFieldID将是另一个名为CustomField的表中的ID,其中包含以下列:CustomFieldID,FieldName,FieldValueTypeID.
选项4:添加CustomerCustomFieldValue表,其中包含每个可能值类型的列,并在右列中存储值.与#3类似,但使用强类型列存储字段值.
CustomerID, CustomFieldID, DateValue, StringValue, NumericValue
10001, 1001, 02/12/2009 8:00 AM, null, null
10001, 1002, null, null, 18.26
10002, 1001, 01/12/2009 8:00 AM, null, null
10002, 1002, null, null, 50.26
Run Code Online (Sandbox Code Playgroud)
选项5:选项3和4使用特定于单个概念(客户)的表.我们的客户也要求以其他形式提供自定义字段.我们应该有一个系统范围的自定义现场存储系统吗?因此,我们不是拥有多个表,例如CustomerCustomFieldValue,EmployeeCustomFieldValue,InvoiceCustomFieldValue,而是拥有一个名为CustomFieldValue的表?虽然对我来说似乎更优雅,但这不会导致性能瓶颈吗?
你使用过这些方法吗?你成功了吗?你会选择什么方法?你知道我应该考虑的任何其他方法吗?
此外,我的客户希望自定义字段能够引用其他表中的数据.例如,客户可能想要向客户添加"收藏付款方式"字段.付款方式在系统的其他地方定义.这带来了"外键"的主题.我是否应该尝试创建约束以确保存储在自定义字段表中的值是有效值?
谢谢
======================
编辑07-27-2009:
谢谢您的回答.似乎方法列表现在非常全面.我选择了选项2(单个XML列).这是目前最容易实施的.我可能不得不折射更强烈定义的方法,因为我的要求会变得更复杂,并且支持的自定义字段的数量会变得更大.
我正在寻找一种方法来获取Linux和MacOSX上的C网络统计数据.具体来说,我需要监控从系统上的每个网络适配器上传和下载的字节数 - 我不需要进行数据包检查,也不需要区分协议,只需要一个'总字节'计数器,我可以间隔轮询没事的.在Windows中,我可以使用iphlpapi.dll库通过GetIfTable(列出网络适配器)和GetIfEntry(读取统计信息),但我找不到Linux/OSX等价物.我对C的了解非常基础,所以我很欣赏一个不太复杂的解决方案.任何帮助将非常感激!
我的webapp运行在各种平台和硬件上的专用Tomcat实例上 - 主要是x86 Linux和Windows,还有Solaris和我在OS X上开发.我一直对操作系统之间关闭时间的差异感到惊讶.并且tomcat一般看起来比其他非平凡的服务(httpd,mysql,squid)慢.所以,一系列问题:
我真的很喜欢细节.我半信服我可以用代码中的东西来改善关机时间.
在某些情况下(高容量,RHEL4),时间通常不超过10-20秒,但这对我来说似乎过长.
我想使用makefile将一组svgs转换为pngs.以下代码段显示了我到目前为止所做的工作.
%.png: origs/%.svg
convert -resize "32x" $< $@
Run Code Online (Sandbox Code Playgroud)
make foo.png现在有效.但我坚持所有目标.我想用一个命令转换所有东西(所有的svgs).
在所有的例子中,我发现所有目标都是这样的:
all: ${OBJECTS}
Run Code Online (Sandbox Code Playgroud)
但我确信我的案子有一个更简单的方法,请帮助我找到它!:d
我已经阅读了文档ReadDirectoryChangesW(),也看过了CDirectoryChangeWatcher项目,但都没有说出为什么人们想要异步调用它.我理解当前线程不会阻塞,但是,至少对于使用完成端口的CDirectoryChangeWatcher代码,当它调用时 GetQueuedCompletionStatus(),该线程无论如何都会阻塞(如果没有更改).
因此,如果我ReadDirectoryChangesW()首先在一个单独的线程中同步调用我不关心它是否阻塞,为什么我会想要ReadDirectoryChangesW()异步调用?
我已经在eclipse中定制了自己的颜色,但是当你点击一个变量时它无法找到更改自动高亮颜色的位置,它突出了所有其他用途.有没有人这样做过?
我正在尝试使add_day功能正常工作,但我遇到了一些麻烦.请注意,我不能对struct(它非常简单)进行任何更改,因为练习的目的是使程序与给定的内容一起工作.代码是
#include "std_lib_facilities.h"
struct Date{
int y, m, d;
Date(int y, int m, int d);
void add_day(int n);
};
void Date::add_day(int n)
{
d+=n;
}
ostream& operator<<(ostream& os, const Date& d)
{
if(d.m<1 || d.m>12 || d.d<1 || d.d>31) cout << "Invalid date: ";
return os << '(' << d.y
<< ',' << d.m
<< ',' << d.d << ')';
}
int main()
{
Date today(1978,6,25);
today.add_day(1);
cout << today << endl;
keep_window_open();
}
Run Code Online (Sandbox Code Playgroud)
我收到一个链接器错误undefined …
我想测试我的应用程序如何对高 -dpi设置做出反应.我不仅仅意味着120dpi.我想测试更高的dpi设置,例如:
我的开发机器的视频卡无法达到300dpi所需的分辨率(或者甚至150dpi).
假设界面设计为" 适合 "显示器上有768行(例如1024x768),则更高dpi设置所需的分辨率为:
Normal Wide-Screen Frame Buffer
dpi Resolution Resolution Zoom Size (MiB)
======= ============ ============ ====== ============
96 1024 x 768 1280 x 768 100% 3.75
113 1200 x 900 1440 x 900 117% 4.96
120 1280 x 960 1536 x 960 125% 5.63
131 1400 x 1050 1680 x 1050 137% 6.73
150 1600 x 1200 1920 x 1200 156% 8.70
300 3200 x 2400 3840 x 2400 313% …Run Code Online (Sandbox Code Playgroud) 我正在编写一个小类来驱动win表单应用程序的集成测试.测试驱动程序类可以访问主Form,并查找需要按名称使用的控件,并使用它来驱动测试.要查找控件,我将遍历Control.Controls树.但是,当我想在对话框窗口(显示为对话框的自定义窗体)中获得控件时,我会陷入困境.我该如何掌握它?
我有一个列表框,其中每个项目都使用文本框表示.问题是我希望能够在移动到xaml窗口中的下一个元素之前在列表框中的所有项之间进行选项卡.
当前(和正常的WPF行为)是当我进入列表框时,第一个元素被突出显示,如果我再次选中,则焦点移动到该项目内的文本框中.如果我再次选中,焦点将移动到窗口中的下一个元素(不通过ListBox中的任何其他项).
我想要的行为如下:当我进入列表框时,第一个文本框自动获得焦点(不突出显示整个项目)*.如果我再次选中,则列表框中的下一个文本框将获得焦点.当我在列表框的最后一个文本框中选中时,焦点移动到下一个控件.
*我已经如何做到这一点,我只是在这里发布,以解释完整的过程.
我一直在寻找解决方案而且我一直找不到东西.