我继承的当前项目主要围绕一个非标准化表.有一些尝试正常化,但没有实施必要的限制.
示例:在Project表中,有一个客户端名称(以及其他值),还有一个客户端表,它只包含客户端名称[无任何键在任何地方].clients表仅用作值池,以便在添加新项目时为用户提供.客户端表或外键上没有主键.
诸如此类的"设计模式"在数据库的当前状态和使用它的应用程序中很常见.我可以使用的工具是SQL Server 2005,SQL Server Management Studio和Visual Studio 2008.我最初的方法是手动确定哪些信息需要规范化并运行Select INTO查询.有没有比个案更好的方法,或者无论如何这可以自动化?
编辑: 此外,我发现"工单号"不是IDENTITY(自动编号,唯一)字段,它们是按顺序生成的,对每个工单都是唯一的.现有编号也存在一些差距,但都是独一无二的.这是编写存储过程以在迁移之前生成虚拟行的最佳方法吗?
如果我不需要主键,我不应该添加一个数据库吗?
添加对Unicode密码的支持,这是开发人员不应忽视的重要功能.
仍然,在密码中添加对Unicode的支持是一项棘手的工作,因为相同的文本可以在Unicode中以不同的方式编码,并且您不希望阻止人们因此而登录.
假设您将密码存储为UTF-8,并且请注意此问题与Unicode编码无关,而且与Unicode规范化有关.
现在的问题是你应该如何规范化 Unicode数据?
你必须确保你能够比较它.您需要确保在下一个Unicode标准发布时,它不会使您的密码验证无效.
注意:仍然有一些地方可能永远不会使用Unicode密码,但这个问题不是关于为什么或何时使用Unicode密码,而是关于如何以正确的方式实现它们.
是否可以在不使用ICU的情况下实现这一点,例如使用OS进行规范化?
passwords unicode normalization unicode-normalization text-normalization
我继承的应用程序跟踪对材料样本执行的实验室测试结果.数据存储在单个表(tblSampleData)中,主键为SampleID,235列表示潜在的测试结果.问题是每个样本只执行少量测试,因此每行包含200多个空值.实际上,还有第二个类似的表(tblSampleData2),其中包含另外215个主要为空的列和一个SampleID的主键.这两个表具有一对一的关系,大多数SampleID在两个表中都有一些数据.但是,对于每个SampleID,都有400个空列!
这个糟糕的数据库设计?如果是这样,哪个正常形式规则被打破?如何查询此表以确定哪些列通常与数据一起填充?我的目标是拥有45个表,10列,空值更少.我怎样才能做到这一点?如何避免破坏现有应用程序?
到目前为止,这些表有大约200,000个样本记录.用户要求我为更多测试添加更多列,但我宁愿构建一个新表.这是明智的吗?
好的我是数据库设计的新手,请给我建议.
我不知道索引做了什么,但我知道我们应该把它放在像WHERE Verified = 1那样重载,并在搜索中像company.name = something.我对吗 ?
它够了吗?
3 数据库规范化
它恰到好处吗?
alt text http://i28.tinypic.com/awp2cz.png
谢谢.
编辑*
规则.
- 每个用户(公司成员或所有者)可以是公司的成员
- 每个公司都有一些用户.
- 有公司管理员(首席执行官,管理员),有公司成员(插入产品)
- 每个公司都可以有产品.
对于数字3,我将在users_company中添加一点 - 1表示admin - 0表示成员
我需要将Lucene得分标准化为0到1之间.
例如,随机查询返回以下分数......
8.864665
2.792687
2.792687
2.792687
2.792687
0.49009037
0.33730242
0.33730242
0.33730242
0.33730242
Run Code Online (Sandbox Code Playgroud)
得分最高的是什么?10.0?
谢谢
如何使用SSE指令获取浮点数的倒数(反向),但仅适用于非零值?
背景情况:
我想规范化一个向量数组,以便每个维度具有相同的平均值.在C中,这可以编码为:
float vectors[num * dim]; // input data
// step 1. compute the sum on each dimension
float norm[dim];
memset(norm, 0, dim * sizeof(float));
for(int i = 0; i < num; i++) for(int j = 0; j < dims; j++)
norm[j] += vectors[i * dims + j];
// step 2. convert sums to reciprocal of average
for(int j = 0; j < dims; j++) if(norm[j]) norm[j] = float(num) / norm[j];
// step 3. normalize the data …Run Code Online (Sandbox Code Playgroud) 我需要帮助设计我的国家,城市,州表.我将从我的表中提供样本数据,以便您可以更好地解决我的问题.
这是我的国家表:
Country
______
code name
US United States
SG Singapore
GB United Kingdom
Run Code Online (Sandbox Code Playgroud)
这是我的城市表:
City
_____
id country city state
1 US Birmingham Alabama
2 US Auburn Alabama
.
.
29 GB Cambridge NULL
30 GB Devon NULL
Run Code Online (Sandbox Code Playgroud)
我的问题是,唯一拥有州领域的国家是美国.所有其他城市都有空值.
我的临时解决方案是为美国创建一个特殊的城市表,然后所有其他国家都有另一个没有州字段的城市表.
我认为这只会使问题复杂化,因为我有两个城市表.
我该如何改进这个设计?
我正在为调查创建一个数据库表,我需要记录报告事件的人,这可能是来自供应商或用户表的记录.最简单的方法是在我的调查表中同时使用一个flexir和一个用户id列,但这似乎是错误的,有什么更好的方法呢?
谢谢.
我将scikit-learn Min-Max定标器与其preprocessing模块与使用NumPy的"手动"方法进行了比较.但是,我注意到结果略有不同.有没有人对此有解释?
使用以下等式进行最小 - 最大缩放:

这应该与scikit-learn one相同: (X - X.min(axis=0)) / (X.max(axis=0) - X.min(axis=0))
我使用两种方法如下:
def numpy_minmax(X):
xmin = X.min()
return (X - xmin) / (X.max() - xmin)
def sci_minmax(X):
minmax_scale = preprocessing.MinMaxScaler(feature_range=(0, 1), copy=True)
return minmax_scale.fit_transform(X)
Run Code Online (Sandbox Code Playgroud)
在随机样本上:
import numpy as np
np.random.seed(123)
# A random 2D-array ranging from 0-100
X = np.random.rand(100,2)
X.dtype = np.float64
X *= 100
Run Code Online (Sandbox Code Playgroud)
结果略有不同:
from matplotlib import pyplot as plt
sci_mm = sci_minmax(X)
numpy_mm = numpy_minmax(X)
plt.scatter(numpy_mm[:,0], numpy_mm[:,1],
color='g',
label='NumPy bottom-up',
alpha=0.5, …Run Code Online (Sandbox Code Playgroud) normalization ×10
sql ×3
database ×2
mysql ×2
refactoring ×2
c ×1
lucene ×1
null ×1
numpy ×1
passwords ×1
primary-key ×1
python ×1
rdbms ×1
scaling ×1
scikit-learn ×1
sql-server ×1
sse ×1
unicode ×1