【发布时间】:2010-10-07 01:46:25
【问题描述】:
我的软件几天前投入生产了,现在我想谈谈数据库结构。
软件收集船舶数据,目前每艘船有174个详细信息,每个详细信息可以是文本值、长文本值、数字(指定长度,有或没有指定小数位数)、日期、带时间的日期、布尔字段、包含许多值的菜单、数据列表等等。
我用下表解决了问题
船: - ID - smallint,自动增量标识 - IMO - int,一个在船舶寿命期间不会改变的数字 ShipDetailType: - ID - smallint,自动增量标识 - 描述 - nvarchar(200),字段包含的值的描述 - Position - smallint,字段在数据输入表单中的位置 - ShipDetailGroup_ID - smallint,数据输入表单中字段所属组的键 - 类型 - varchar(4),字段的类型如上所述 ShipDetailGroup - ID - smallint,自动增量标识 (剪断……) ShipMenuPresetValue - ID - smallint,自动增量标识 - ShipDetailType_ID - smallint,值所属详细信息的键 - Value - nvarchar(100),菜单类型详细信息中预设的值 ShipTextDetail - ID - smallint,自动增量标识 - Ship_ID - smallint,详细信息所属船舶的密钥 - ShipDetailType_ID - smallint,值的详细类型的 Key - 文本 - nvarchar(500),包含详细信息值的字段 - 修改日期 - 小日期时间 - User_ID - smallint,用户表的键 船舶文本详细历史 (剪断……) 此表与 ShipTextDetail 相同,包含对详细信息的所有更改。 列表详细信息类型的其他表,每个表都包含列表所需的指定字段,...我刚刚读到这篇文章:http://thedailywtf.com/Articles/The_Inner-Platform_Effect.aspx 和 http://asktom.oracle.com/pls/asktom/f?p=100:11:0::::P11_QUESTION_ID:10678084117056
文章说这不是处理问题的正确方法。
我的客户在更改详细信息描述并添加更多详细信息时拥有详细信息和组的管理 GUI。
数据输入表单是通过从DetailGroups和DetailTypes中读取结构动态构建的,每个详细类型生成一个指定的输入控件。
cmets 建议解决此问题的另一种方法是从表中动态创建和删除列。
你怎么看?
图表截图:http://img24.imageshack.us/my.php?image=66604496uk3.png
【问题讨论】:
-
你有数据架构图吗?
-
我发布了数据架构的屏幕截图
-
"数据输入表单是动态构建的" 因为我还不能编辑帖子:"数据输入表单是动态构建的"
-
建议更好的标题?
标签: database database-design normalization denormalization