【发布时间】:2011-07-16 02:04:29
【问题描述】:
我正在开发一个数据库,需要知道在数据库中存储维度的最佳方式。有些物体有长度、宽度、高度和深度。有些只有长度和宽度。如何在数据库中正确存储这些数据?
【问题讨论】:
我正在开发一个数据库,需要知道在数据库中存储维度的最佳方式。有些物体有长度、宽度、高度和深度。有些只有长度和宽度。如何在数据库中正确存储这些数据?
【问题讨论】:
如果您希望对象标准化,您可以将其与 Dimension 类型相关联。
如果我有一个只有长度和宽度的对象
Object1 Width 10ft
Object1 Length 20ft
许多边桌,许多是dimensions 的类型,一侧是Object。
这是另一个例子,你给出的长度、宽度、高度、深度:
Object2 Width 10ft
Object2 Length 10ft
Object2 Height...
Object2 Depth...
这里的关键是你有一个单侧表(对象)指向一个多侧表(维度)。一些对象可以有一个维度,而其他对象没有任何维度(例如一个点)。我不知道你的表格布局,但你可以有这样的效果:
Object
ObjectID
Dimension
DimensionID
ObjectDimension
ObjectID
DimensionID
Value
INSERT INTO Object(ObjectID) VALUES("Square");
INSERT INTO Object(ObjectID) VALUES("Point");
INSERT INTO Dimension(DimensionID) VALUES("L"); //for length
INSERT INTO Dimension(DimensionID) VALUES("W"); //for width
INSERT INTO ObjectDimension(ObjectID, DimensionID, Value) VALUES ("Square", "L", 5);
INSERT INTO ObjectDimension(ObjectID, DimensionID, Value) VALUES ("Square", "W", 5);
【讨论】:
假设创建此数据库以支持应用程序;我建议在您首先定义域模型之前不要担心您的数据模型。从应用程序及其使用这些维度的目的开始。设计一个支持您的领域模型的数据库。这里根本没有足够的信息来建议您应该创建两个包含所需列的单独表,或者一个具有可为空约束的表。
【讨论】:
如果您使用的是 MySQL,这里是对数字数据类型的引用:http://dev.mysql.com/doc/refman/5.0/en/numeric-types.html
我不确定尺寸有多大,所以我不能告诉你应该是什么尺寸。如果您以毫米为单位存储房屋的尺寸,您将需要更大的数据类型。该页面上的表格会显示给您。
出于性能原因。我们的目标是尽量只存储您认为自己需要的东西,而不是更多。
【讨论】:
SELECT ... FROM ... LEFT JOIN ON Dimension WHERE o.DimensionID = d.DimensionID 查看我的分离示例。