我的软件几天前投入生产,现在我想就数据库结构进行一些争论。
软件收集船舶数据,目前每艘船舶有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 中读取结构动态构建的,每个详细类型生成一个指定的输入控件。
评论表明解决此问题的另一种方法是从表中动态创建和删除列。
你怎么看?
图表截图: http://img24.imageshack.us/my.php?image= 66604496uk3.png