【问题标题】:What's the best way to store object's dimension in a Database?在数据库中存储对象维度的最佳方法是什么?
【发布时间】:2011-07-16 02:04:29
【问题描述】:

我正在开发一个数据库,需要知道在数据库中存储维度的最佳方式。有些物体有长度、宽度、高度和深度。有些只有长度和宽度。如何在数据库中正确存储这些数据?

【问题讨论】:

    标签: database database-design


    【解决方案1】:

    如果您希望对象标准化,您可以将其与 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);
    

    【讨论】:

    • 很棒的答案。另一件事,产品是关于螺丝的。一个螺丝有多种尺寸,如 L:1" W:3/4, L:1 1/4" W:3/4。您的桌子设计是否足以处理一种产品的多个维度?
    • @Raymond Ho - 为什么不呢?螺丝是一种特殊的产品,但它们的大小可能会有所不同,因此您可以存储多对多的关系。对象可以存储各种大小,没关系。
    【解决方案2】:

    假设创建此数据库以支持应用程序;我建议在您首先定义域模型之前不要担心您的数据模型。从应用程序及其使用这些维度的目的开始。设计一个支持您的领域模型的数据库。这里根本没有足够的信息来建议您应该创建两个包含所需列的单独表,或者一个具有可为空约束的表。

    【讨论】:

      【解决方案3】:

      如果您使用的是 MySQL,这里是对数字数据类型的引用:http://dev.mysql.com/doc/refman/5.0/en/numeric-types.html

      我不确定尺寸有多大,所以我不能告诉你应该是什么尺寸。如果您以毫米为单位存储房屋的尺寸,您将需要更大的数据类型。该页面上的表格会显示给您。

      出于性能原因。我们的目标是尽量只存储您认为自己需要的东西,而不是更多。

      【讨论】:

      • 我认为他不是在询问特定的数据类型是否是 int / decimal / float / 等。他是在询问如何处理对象与维度的关系。
      • 是的,我想知道如何处理这些表之间的关系。因为如果我把尺寸放在一张桌子上,我将来会遇到问题。
      • @Raymond Ho - 查看规范化规则,您最好将这些信息分开。维度应该有它自己的表,然后可以将对象链接到维度。当您需要查看对象的特定维度时,您只需 SELECT ... FROM ... LEFT JOIN ON Dimension WHERE o.DimensionID = d.DimensionID 查看我的分离示例。
      猜你喜欢
      • 1970-01-01
      • 2020-04-08
      • 2011-01-24
      • 2020-04-28
      • 2016-04-26
      • 1970-01-01
      • 1970-01-01
      • 2011-06-07
      • 1970-01-01
      相关资源
      最近更新 更多