我正在为一家大理石制造公司创建一个应用程序,以跟踪给定宽度和高度的大理石生成过程。这会跟踪
这是我将如何组织数据的表模式。第一个是StoneInfo
包含有关石头的基本信息,例如“unique_id、stone_id、stone_name、creation_time、last_purchase_time、generation_status”</p>
unique_id - 是一个随机生成的 id - 这是为了与另一个表保持外键关系StoneMetaDetails
石头资讯
UNIQUE ID (Primary key)
STONE ID (Indexed & Unique key)
STONE_NAME (Indexed & Unique key)
CREATION_TIME
LAST_PURCHASE_TIME
GENERATION_STATUS
为了避免第二次归一化异常,我分成了两个表。此处包含有关指定维度中每种石头的创建状态的详细信息。创建状态类似于
CREATED_SUCCESSFULLY
CREATION_INPROGRESS
CRAETION_ON_HOLD_DUE_TO_LESS_REQUIREMENT
CREATION_ON_HOLD_DUE_TO_LACK_OF_RESOURCE
CREATION_ON_HOLD_DUE_TO_LACK_OF_MACHINE
CREATION_ON_HOLD
StoneMetaDetails
UNIQUE ID (FOREIGN KEY with on delete cascade)
FORMAT (PRIMARY KEY)
DIMENSION (PRIMARY KEY)
CREATION_STATUS
STORE_NAME
WEIGHT
QUANTITY_AVAILABLE
MACHINE TYPE/MACHINE ID
我想保持每一种石头的创造状态(它们可能有不同的味道和尺寸)。我想要的只是最小化表上的读/写操作以便更快地访问。
我正在维护两个状态值,例如GENERATION_STATUS
,
CREATION_STATUS
因为
GENERATION_STATUS
- 当它是(“生成”或“由于某些原因暂停”或“生成过程已开始/初始化”)
CREATION_STATUS
时 - 保持跟踪特定石头类型及其尺寸的确切状态值。
在这里,我试图在GENERATION_STATUS
按位或运算的帮助下将这两个列值与列值合并 - 通过分配不同的常量值(在 2^ 关系中)
//All these values are meant for stone type
public static final long STONE_TYPE_MARBLE_20_X_30 = 2;
public static final long STONE_TYPE_MARBLE_50_X_60 = 4;
public static final long STONE_TYPE_MARBLE_10_X_60 = 8;
public static final long STONE_TYPE_MARBLE_20_X_60 = 16;
public static final long STONE_TYPE_MARBLE_40_X_60 = 32;
public static final long STONE_TYPE_MARBLE_60_X_60 = 64;
public static final long STONE_TYPE_LIMESTONE_10_X_30 = 128;
public static final long STONE_TYPE_LIMESTONE_10_X_40 = 256;
public static final long STONE_TYPE_TRAVERTINE = 512;
public static final long STONE_TYPE_MARBLE = 1024;
public static final long STONE_TYPE_GRANITE = 2048; (2^11)
//Have alloted values for 2^0 to 2^14 for stone type
//All these variables are meant for representing creation/generation status of a stone
public static final long GENERATION_SUCCESS = 2^15;
public static final long GENERATION_IN_PROGRESS = 2^16;
public static final long GENERATION_ON_HOLD_DUE_TO_MINIMAL_REQUIREMENT = 2^17;
public static final long GENERATION_ON_HOLD_DUE_TO_LACK_OF_MACHINE = 2^18;
public static final long GENERATION_ON_HOLD_DUE_TO_MACHINE_COULD_NOT_GENERATE = 2^19;
//Some ten to fifteen different types of generation error values may be possible
这样我就可以在不加入另一个表的情况下获得它,以便更快地访问。
为了更清楚,我正在尝试映射,
stone_id
及其generation_status
在StoneInfo
表中。因此,generation_status
无论石头类型及其尺寸如何,它都包含状态值。
IE; (STONE_A_10_X_20 | GENERATION_SUCCESS) | (STONE_A_20_X_30 | GENERATION_INPROGRESS) 在单个列中。
这可以在按位或的帮助下实现吗?我走对了吗?或者请建议我以更好的方式处理这个问题。
感谢您耐心阅读这个长长的问题故事 :)